C++ 私有继承与遏制

C++ 私有继承与遏制,c++,inheritance,containment,private-inheritance,C++,Inheritance,Containment,Private Inheritance,在解释何时必须使用私有继承而不是遏制时,作者说: “我们需要在另一个基本子对象之前构造已用对象,或者在另一个基本子对象之后销毁它。如果对象的生存期稍长一些很重要,那么除了使用继承之外,没有其他方法可以获得它。” 如果希望子对象A在子对象B之前构造,在子对象B之后析构函数,那么在封闭类中在B之前声明A还不够吗?换句话说,为什么我们不能在这种情况下使用包容来实现相同的结果呢?我相信作者讨论的是基本子对象,而不是直接子对象。也就是说,如果希望在构造类的其他基类之前先构造类的某些成员,则可以使用私有继承

在解释何时必须使用私有继承而不是遏制时,作者说:

“我们需要在另一个基本子对象之前构造已用对象,或者在另一个基本子对象之后销毁它。如果对象的生存期稍长一些很重要,那么除了使用继承之外,没有其他方法可以获得它。”


如果希望子对象A在子对象B之前构造,在子对象B之后析构函数,那么在封闭类中在B之前声明A还不够吗?换句话说,为什么我们不能在这种情况下使用包容来实现相同的结果呢?

我相信作者讨论的是基本子对象,而不是直接子对象。也就是说,如果希望在构造类的其他基类之前先构造类的某些成员,则可以使用私有继承。在这种情况下,使用私有继承将导致C++在私有基类之前初始化其他基类,前提是您继承了它们的正确顺序。例如,如果要使类<代码>派生,希望在<代码>派生中有一个<代码>子对象对象,并从<代码>基继承,但希望在<代码>基之前初始化<代码>子对象,则可以编写

class Derived: private Subobject, public Base {

}
现在,
子对象
将在
之前初始化

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


希望这有帮助

如何在基类之前声明成员?现在我看到了这一点,很明显。谢谢