多继承中虚基类构造函数的一种调用规则
规则:如果父类中有虚基类(A),且有一个直接基类(B)是虚基类的子类,那么子类(C或D)若不显式调用虚基类的有参数构造函数,它的直接基类(B)即使在构造列表中调用了非默认构造函数,那么也会直接调用虚基类的默认构造函数。
#include <iostream>using namespace std;const int CONST = 1;#define CC CONSTclass A{public: A(int){cout<<"A(int)"<<endl;} A(){cout<<"A()"<<endl;}};class B: virtual public A{public: B(int):A(CC){cout<<"B(int)"<<endl;} B(){cout<<"B()"<<endl;}};class C: public B, virtual public A{public: C(int):B(CC){}};class D: public B, virtual public A{public: D(int):B(CC), A(CC){}};int main(){ C c(CC); D d(CC);}A()
B(int)
A(int)
B(int)