第二章构造函数语义学——带有Default Constructor的Base Class

和 成员变量 的情况一样,如果类中有基类,那么调用 基类构造 函数的顺序和和声明的顺序一致。

代码如下:

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

 

 

 

 

 

posted @ 2012-11-21 18:59  三更_雨  阅读(264)  评论(0编辑  收藏  举报