我假设我理解“受保护的继承”的含义。但是,在和这里的一个人讨论这个问题后,我现在感到有些困惑。
这是我对 C++ 中“保护继承”的理解
假设以下类结构。
class Base {}
class SubClass : protected Base {}
Run Code Online (Sandbox Code Playgroud)
1>如果一个子类被定义为“protected BaseClass”,那么这个子类就不再是BaseClass的子类了。相反,BaseClass 仅用作子类的实用工具。换句话说,如果您将 SubClass* 转换为 Base*,将 SubClass& 转换为 Base&,或将 SubClass 转换为 Base,您应该会遇到错误。
2> 人们使用保护继承的主要原因是预期的SubClass 不是Base 的子类(例如,Car 不是Engine 的子类)。同时,SubClass 想要调用 Base 类中定义的函数。
3> 有时您更喜欢使用受保护的继承而不是将成员变量定义为 Base 的对象是有充分理由的。(但我不记得在哪种情况下)。
如果我错了,请纠正我的意见。
谢谢你
对于 1. -SubClass仍然是Base. 受保护的继承仍然是继承。不过,您是正确的,从SubClassto 的自动转换Base是不可能的。
SubClass sub;
Base* base(&sub);
Run Code Online (Sandbox Code Playgroud)
给
错误 C2243:“type cast”:从“SubClass *”到“Base *”的转换存在,但无法访问
对于2和3 -主要的原因人们希望这是隐藏public/protected的成员Base来自客户的SubClass。 子类中SubClass还能看到他们。与此对比private继承它隐藏Base完全从子类和客户端的SubClass,这也将符合条件的在2最后一句,但不允许-任何其他外部使用的Base通过SubClass。
| 归档时间: |
|
| 查看次数: |
498 次 |
| 最近记录: |