私有继承与遏制

时间:2012-02-07 23:27:09

标签: c++ inheritance containment private-inheritance

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

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

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

1 个答案:

答案 0 :(得分:8)

我认为作者正在谈论 base 子对象,而不是直接的子对象。也就是说,如果您希望在构造类的其他基类之前构造类的某个成员,则可以使用私有继承。在这种情况下,使用私有继承将导致C ++在其他基类之前初始化私有继承的基类,前提是您以正确的顺序从它们继承。例如,如果您正在创建课程Derived,则需要Subobject中的Derived对象,并从Base继承,但您希望之前初始化Subobject Base,你可以写

class Derived: private Subobject, public Base {

}

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

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

希望这有帮助!