c++对象初始化中各构造器的顺序
c++中,类只是声名,而在定义这个类的对象时,如果这个类是继承的,或者这个对象里面还有其他的对象,各个构造器的执行顺序是怎么样的。
先放结论:
顺序:1.基类的constructor。2.initialize list(构造器圆括号加冒号)。3.其他对象的constructor。4.自己的constructor。
证明:
#include<iostream> using namespace std; class A{ public: A(){ cout<<"A:A()"<<endl; } A(int i) { cout<<"A:A("<<i<<")"<<endl; } }; class B{ public: B(){ cout<<"B:B()"<<endl; } }; class C:public A{ public: A a; B b; C(int i):a(i){ cout<<"C::C()"; } }; int main() { C c(10); }
构建了三个类:A,B,C, 其中C继承了A,A的对象a和B的对象b为C的一个成员函数,我们用initialize list 初始化a。同时比较三个初始化的顺序。
结果:
A:A()。是基类的default constructor,第一出现表明基类的初始化应该是第一。
A:A(10)。是initialize list 的初始化,表明第二。
B:B()。是其他类的对象。第三。
C:C()。是自己的constructor 第四。