语言:C / C ++
问题:采用常见的例子,其中
我们希望通过 D
的对象访问 A 的功能注意:它是虚拟继承!所以我们知道 A 只有一个对象。
问题是:谁首先创建了 B 或 C 的对象?
牢记层次结构
A
/ \
B C
\ /
D
答案 0 :(得分:0)
简而言之,OO本身就此没有无保证。
如果你正在谈论具体的实现或语言(但问题没有),可能会有保证。
答案 1 :(得分:0)
是的,这个问题有时也被称为死亡钻石。
很遗憾,您的问题无法回答:它基于您编程的当前语言。
例如,在Scala中(特征允许多重继承),在linearization algorithm上有一个非常严格的实例化规则,你可以找到正确的细节。
我想你正在玩C ++。如果这是正确的,请查看C++ FAQ(the problem is also mentioned there)的相应部分。
答案 2 :(得分:0)
如果你在谈论C ++和类的实例顺序,那么它将取决于声明中的继承顺序。
所以,在
class D : public B,public C
B将首先实例化,然后是C.
class D : public C,public B
首先实例化C,然后是B.