首页 > 后端开发 > C++ > 正文

c++中public, protected, private继承的区别_c++继承访问控制详解

冰火之心
发布: 2025-11-17 11:35:20
原创
329人浏览过
public继承保持基类成员访问权限,protected继承将public和protected成员变为protected,private继承均使其变为private,基类private成员均不可直接访问。

c++中public, protected, private继承的区别_c++继承访问控制详解

在C++中,继承的访问控制不仅影响基类成员在派生类中的可见性,还决定了外部代码能否访问这些成员。public、protected 和 private 继承是三种不同的继承方式,它们对基类成员的访问权限产生不同的影响。

1. public 继承

使用 public 关键字进行继承时,基类的成员访问权限在派生类中保持不变:

  • 基类的 public 成员在派生类中仍是 public
  • 基类的 protected 成员在派生类中仍是 protected
  • 基类的 private 成员不可直接访问(但可通过基类的 public/protected 接口间接访问)

这是最常用的继承方式,体现了“is-a”关系。派生类对象可以被当作基类对象使用。

示例:

C知道
C知道

CSDN推出的一款AI技术问答工具

C知道 45
查看详情 C知道

立即学习C++免费学习笔记(深入)”;

class Base {
public:
    void pub() {}
protected:
    void prot() {}
private:
    void priv() {}
};
<p>class Derived : public Base {
// pub() 是 public
// prot() 是 protected
// priv() 不可访问
};</p>
登录后复制

2. protected 继承

使用 protected 继承时,基类的所有 publicprotected 成员在派生类中都变为 protected

  • 基类的 public 成员 → 派生类中为 protected
  • 基类的 protected 成员 → 派生类中仍为 protected
  • 基类的 private 成员 → 不可访问

这种继承方式限制了外部对基类 public 成员的直接访问,适用于不希望派生类对外暴露基类接口的场景。

示例:

立即学习C++免费学习笔记(深入)”;

class Derived : protected Base {
    // pub() 变为 protected
    // prot() 仍为 protected
};
// outside code cannot call d.pub()
登录后复制

3. private 继承

使用 private 继承时,基类的所有 publicprotected 成员在派生类中都变为 private

  • 基类的 public 成员 → 派生类中为 private
  • 基类的 protected 成员 → 派生类中为 private
  • 基类的 private 成员 → 不可访问

private 继承表示“按照…实现”,而不是“是一个”。它常用于实现代码复用,但不希望暴露基类接口。此时,派生类对象不能隐式转换为基类指针或引用。

示例:

立即学习C++免费学习笔记(深入)”;

class Derived : private Base {
    // pub() 和 prot() 都变为 private
};
// Derived d; Base* p = &d; // 错误:不能隐式转换
登录后复制

4. 访问控制总结表

继承方式 基类 public 成员 基类 protected 成员 基类 private 成员
public public protected 不可访问
protected protected protected 不可访问
private private private 不可访问

无论哪种继承方式,基类的 private 成员始终不能在派生类中直接访问。

5. 实际使用建议

  • 优先使用 public 继承,用于表达“is-a”关系
  • private 继承可用于替代组合(has-a),当需要访问基类 protected 成员时
  • protected 继承较少使用,适合中间层封装
  • 若不需要继承接口,考虑使用组合而非 private 继承

基本上就这些。理解这三种继承方式的关键在于掌握基类成员在派生类中的访问级别变化规则,并根据设计意图选择合适的继承方式。

以上就是c++++中public, protected, private继承的区别_c++继承访问控制详解的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号