语言:C/C++
问题:举个常见的例子,其中
- A是父类。
- B和C都继承自类A。
- D继承自B和C
我们想通过D的对象访问A的函数
注意:它是虚拟继承!所以我们知道A只有一个对象。
问题是:谁的对象将首先创建B或C?
牢记层次结构
A
/ \
B C
\ /
D
语言:C/C++
问题:举个常见的例子,其中
我们想通过D的对象访问A的函数
注意:它是虚拟继承!所以我们知道A只有一个对象。
问题是:谁的对象将首先创建B或C?
牢记层次结构
A
/ \
B C
\ /
D
简而言之, OO 本身对此没有任何保证。
如果您正在谈论特定的实现或语言(但问题没有),则可能对此有保证。
是的,这个问题有时也被撇号为死亡钻石。
不幸的是,您的问题无法回答:它基于您正在编程的当前语言。
例如,在 Scala(特征允许多重继承)中,沿线性化算法的实例化有一个非常严格的规则的实例化有一个非常严格的规则,您可以在那里找到适当的细节。
我想你在玩 C++。如果这是正确的,请查看C++ FAQ的正确部分(那里也提到了该问题)。
如果您在谈论 C++ 和类的实例化顺序,那么它将取决于声明中的继承顺序。
所以,在
class D : public B,public C
B 将首先被实例化,然后是 C。
class D : public C,public B
C 将首先被实例化,然后是 B。