public继承保持基类成员访问权限,protected继承将public和protected成员变为protected,private继承均使其变为private,基类private成员均不可直接访问。

在C++中,继承的访问控制不仅影响基类成员在派生类中的可见性,还决定了外部代码能否访问这些成员。public、protected 和 private 继承是三种不同的继承方式,它们对基类成员的访问权限产生不同的影响。
1. public 继承
使用 public 关键字进行继承时,基类的成员访问权限在派生类中保持不变:
基类的 public 成员在派生类中仍是 public基类的 protected 成员在派生类中仍是 protected基类的 private 成员不可直接访问(但可通过基类的 public/protected 接口间接访问)
这是最常用的继承方式,体现了“is-a”关系。派生类对象可以被当作基类对象使用。
示例:
立即学习“C++免费学习笔记(深入)”;
class Base {public: void pub() {}protected: void prot() {}private: void priv() {}};class Derived : public Base {// pub() 是 public// prot() 是 protected// priv() 不可访问};
2. protected 继承
使用 protected 继承时,基类的所有 public 和 protected 成员在派生类中都变为 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 继承时,基类的所有 public 和 protected 成员在派生类中都变为 private:
基类的 public 成员 → 派生类中为 private基类的 protected 成员 → 派生类中为 private基类的 private 成员 → 不可访问
private 继承表示“按照…实现”,而不是“是一个”。它常用于实现代码复用,但不希望暴露基类接口。此时,派生类对象不能隐式转换为基类指针或引用。
示例:
立即学习“C++免费学习笔记(深入)”;
class Derived : private Base { // pub() 和 prot() 都变为 private};// Derived d; Base* p = &d; // 错误:不能隐式转换
4. 访问控制总结表
publicpublicprotected不可访问protectedprotectedprotected不可访问privateprivateprivate不可访问
无论哪种继承方式,基类的 private 成员始终不能在派生类中直接访问。
5. 实际使用建议
优先使用 public 继承,用于表达“is-a”关系private 继承可用于替代组合(has-a),当需要访问基类 protected 成员时protected 继承较少使用,适合中间层封装若不需要继承接口,考虑使用组合而非 private 继承
基本上就这些。理解这三种继承方式的关键在于掌握基类成员在派生类中的访问级别变化规则,并根据设计意图选择合适的继承方式。
以上就是c++++中public, protected, private继承的区别_c++继承访问控制详解的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1484463.html
微信扫一扫
支付宝扫一扫