c++ - 私有(private)继承与遏制

原文 标签 c++ inheritance containment private-inheritance

在解释何时必须使用私有继承而不是包含继承时,此article的作者说:

“我们需要在另一个基本子对象之前构造一个使用过的对象,或在另一个基础子对象之后销毁它。如果对象寿命稍长一点很重要,那么除了使用继承之外,别无他法”

如果您想在子对象B之前构造子对象A,然后在B之后构造子对象,那么在封闭类中仅在B之前声明A是不够的吗?换句话说,在这种情况下,为什么不能使用遏制来达到相同的结果?

最佳答案

我相信作者正在谈论基础子对象,而不是直接子对象。也就是说,如果希望在构造该类的其他基类之前先构造该类的某个成员,则可以使用私有继承。在这种情况下,使用私有继承会使C++在其他基类之前初始化私有继承的基类,前提是您已按正确的顺序从它们继承。例如,如果您要创建Derived类,想要在Subobject中创建一个Derived对象,并从Base继承,但是您希望在Subobject之前初始化Base,则可以编写

class Derived: private Subobject, public Base {

}

现在,Subobject将在Base之前初始化。

(也就是说,这是一个非常愚蠢的用例!)

希望这可以帮助!

相关文章:

c# - 如何从基类的实例初始化派生类的实例?

c# - 接口(interface)是否在继承链中?

python - python列表是否有__contains__的等价物来测试身份?

jquery - jQuery Draggable遏制可见窗口?

javascript - 删除可拖动的遏制

c++ - 从boost禁用`progress_display`的输出

c++ - 重新声明模板参数

inheritance - 为什么我的嵌套Div不继承父高?

c++ - 类型推导后,函数模板中的替换顺序是否有保证?

c++ - 带有默认参数的模板类的operator <<中的lambda错误