【发布时间】:2013-07-31 21:15:02
【问题描述】:
给定以下 C++ 代码:
struct A {
A() { f(0); }
A(int i) { f(i); }
virtual void f(int i) { cout << i; }
};
struct B1 : virtual A {
B1(int i) : A(i) { f(i); }
virtual void f(int i) { cout << i+10; }
};
struct B2 : virtual A {
B2(int i) : A(i) { f(i); }
virtual void f(int i) { cout << i+20; }
};
struct C : B1, virtual B2 {
int i;
C() : B1(6),B2(3),A(1){}
virtual void f(int i) { cout << i+30; }
};
谁能解释为什么C* c = new C();会按顺序打印 1 23 然后 16 吗?它如何决定打印的顺序?我知道非虚拟的B1 将被最后调用,但为什么A() 首先被调用?感谢您提前提供的帮助和解释。
【问题讨论】:
-
A是B2的基础,所以必须在B2之前构造。 -
重复:stackoverflow.com/questions/6247595/… 和 stackoverflow.com/questions/2669888/… ?如果您查找基类的初始化顺序,您会发现大量阅读材料:)
标签: c++ virtual-inheritance diamond-problem