c++ - 私有(private)继承 vs 包含

标签 c++ inheritance containment private-inheritance

在解释何时必须使用私有(private)继承而不是包含时,此 article 的作者说以下内容:

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

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

最佳答案

我相信作者是在谈论基础 子对象,而不是直接子对象。也就是说,如果您希望在构造该类的其他基类之前构造该类的某些成员,则可以使用私有(private)继承。在这种情况下,使用私有(private)继承将导致 C++ 在其他基类之前初始化私有(private)继承的基类,前提是您已经以正确的顺序从它们继承。例如,如果您正在制作 Derived 类,希望在 Derived 中有一个 Subobject 对象,并继承自 Base , 但你希望 SubobjectBase 之前初始化,你可以这样写

class Derived: private Subobject, public Base {

}

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

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

希望这对您有所帮助!

关于c++ - 私有(private)继承 vs 包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9185667/

相关文章:

c++ - TMP 缓慢的常见罪魁祸首是什么

c++ - 选择排序以找到未排序数组中的最大数字

grails - Grails中多少个域类继承太多?

java - 在hibernate中使用继承将对象从子类表复制到父类(super class)表

javascript - JQuery-UI 遏制 : 'parent' does not work

拖动项目时 JQuery 调用函数

C++ std::memory_order_relaxed 困惑

c++ - 相当于 gcc/g++ 中的 __declspec( naked )

c++ - 使用模板访问 C++ 中父类(super class)的 protected 成员

Jquery 可拖动不适用于包含