【问题标题】:Private inheritance vs containment私有继承与包含
【发布时间】:2012-02-07 23:27:09
【问题描述】:

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

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

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

【问题讨论】:

  • 如何在基类之前声明成员?

标签: c++ inheritance containment private-inheritance


【解决方案1】:

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

class Derived: private Subobject, public Base {

}

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

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

希望这会有所帮助!

【讨论】:

  • 现在我看到了,很明显。谢谢。
猜你喜欢
  • 2020-09-04
  • 2011-01-05
  • 2020-10-25
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多