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 第四。

 

posted @ 2019-03-06 16:47  zhqian  阅读(290)  评论(0编辑  收藏  举报