和 成员变量 的情况一样,如果类中有基类,那么调用 基类构造 函数的顺序和和声明的顺序一致。
代码如下:
class A1 { public: A1(){cout<<"A1 construction"<<endl;} }; class A2 { public: A2(){cout<<"A2 construction"<<endl;} }; class A3: public A1, public A2//注意,这里为声明的顺序 { public: A3(){ A2::A2(); A1::A1(); cout<<"A3 construction"<<endl; } }; int main(int argc, char* argv[]) { A3 a; return 0 }
这里为了验证是否显示的调用了构造函数,编译器就不自动调用基类的构造函数了。
结果是,就算你显示的调用了基类的构造函数,编译器还是会调用的。
结果如下:
A1 construction
A2 construction // 前两行为编译器调用的,后两行为显示调用的 基类的构造函数
A2 construction
A1 construction
A3 construction