给定以下 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()
首先被调用?感谢您提前提供的帮助和解释。