构造函数调用顺序总结:
1. 按虚继承顺序
2. 按非虚继承顺序
3. 按成员变量声明顺序
#include <iostream>
using namespace std;
class A
{
public:
A(){cout<<"A"<<endl;}
};
class B
{
public:
B(){cout<<"B"<<endl;}
};
class C
{
public:
C(){cout<<"C"<<endl;}
};
class D
{
public:
D(){cout<<"D"<<endl;}
};
class E
{
public:
E(){cout<<"E"<<endl;}
};
class X: public A, virtual public B, public C, virtual public D
{
public:
X(){cout<<"X"<<endl;}
A a;
E e;
};
int main()
{
X x;
return 0;
}
运行结果:
B
D
A
C
A
E
X