gpt4 book ai didi

C++ -- 关于 "protected inheritance"的问题

转载 作者:太空狗 更新时间:2023-10-29 21:08:00 25 4
gpt4 key购买 nike

我假设我理解“ 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com