多态对象创建 - 钻石继承层次结构

时间:2012-08-03 11:40:21

标签: oop diamond-problem

语言:C / C ++
问题:采用常见的例子,其中

  • A 是父类。
  • B C 都继承自 A 类。
  • D 继承自 B C

我们希望通过 D

的对象访问 A 的功能

注意:它是虚拟继承!所以我们知道 A 只有一个对象。

问题是:谁首先创建了 B C 的对象?

牢记层次结构

   A
 /   \
B     C
 \   /
   D

3 个答案:

答案 0 :(得分:0)

简而言之,OO本身就此没有无保证

如果你正在谈论具体的实现或语言(但问题没有),可能会有保证。

答案 1 :(得分:0)

是的,这个问题有时也被称为死亡钻石

很遗憾,您的问题无法回答:它基于您编程的当前语言。

例如,在Scala中(特征允许多重继承),在linearization algorithm上有一个非常严格的实例化规则,你可以找到正确的细节。

我想你正在玩C ++。如果这是正确的,请查看C++ FAQthe problem is also mentioned there)的相应部分。

答案 2 :(得分:0)

如果你在谈论C ++和类的实例顺序,那么它将取决于声明中的继承顺序。

所以,在

class D :  public B,public C

B将首先实例化,然后是C.

class D :  public C,public B

首先实例化C,然后是B.