我假设我理解“ protected 继承”的含义。但是,在和这里的一个人讨论过这个问题后,我现在感到有点困惑。
这是我对c++中“保护继承”的理解
假设以下类结构。
class Base {}
class SubClass : protected Base {}
1> 如果一个子类被定义为“protected BaseClass”,那么这个子类就不再是BaseClass的子类了。相反,BaseClass 仅用作子类的实用工具。换句话说,如果您将 SubClass* 转换为 Base*,将 SubClass& 转换为 Base&,或将 SubClass 转换为 Base,您应该会遇到错误。
2> 人们使用 protected 继承的主要原因是预期的子类不是 Base 的子类(例如,Car 不是 Engine 的子类)。同时,SubClass 想要调用 Base 类中定义的函数。
3> 有时您更喜欢使用 protected 继承而不是将成员变量定义为 Base 的对象,这是有充分理由的。 (但我不记得是哪种情况)。
如有错误,请指正。
谢谢
最佳答案
对于 1. - SubClass
仍然是 Base
的子类. protected 继承仍然是继承。从 SubClass
自动转换是正确的至 Base
但是,这是不可能的。
SubClass sub;
Base* base(&sub);
给予
error C2243: 'type cast' : conversion from 'SubClass *' to 'Base *' exists, but is inaccessible
对于 2. 和 3. - 人们想要这个的主要原因是隐藏 public/protected
Base
的成员来自 SubClass
的客户 . SubClass
的子类仍然可以看到它们。将此与 private
对比隐藏的继承Base
完全来自 SubClass
的子类和客户 - 这也符合您在 2 的最后一句中的标准,但不允许对 Base
的任何其他外部使用|通过SubClass
.
关于C++ -- 关于 "protected inheritance"的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4109423/