C++——关于“保护继承”的问题

q09*_*987 3 c++

我假设我理解“受保护的继承”的含义。但是,在和这里的一个人讨论这个问题后,我现在感到有些困惑。

这是我对 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 的对象是有充分理由的。(但我不记得在哪种情况下)。

如果我错了,请纠正我的意见。

谢谢你

Ste*_*end 5

对于 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