派生类的初始化列表

来源:互联网 发布:2016京东和淘宝哪个好 编辑:程序博客网 时间:2024/04/30 02:04

说明派生类对象时,

1、先调用各基类的构造函数:这里分两种情况

    1.1 显式地在初始化列表中调用基类的构造函数,如 B():A(int )...这样的话,就调用A的有参构造函数

    1.2 没有显式调用,编译器把基类的默认构造函数插入到初始化列表中,即B()  => B():A()

2、再调用对象成员的构造函数 :这里分两种情况

    2.1 在初始化列表中,则直接调用拷贝构造函数

    2.2 不在初始化列表中,则先调用对象成员的默认构造函数。如果对象成员没有默认构造函数,会出错。

3、最后调用派生类的构造函数


#include <iostream>#include <stack>#include <time.h>using namespace std;class A{int i;public:A(){cout<<"default A"<<endl;}A(int x):i(x){cout<<"A"<<endl;}~A(){cout<<"~A"<<endl;}A(A& a){cout<<"copy_A"<<endl;}};class B:public A{A _a;int j;public:B(int a,int b,A& aa ):j(b),_a(aa){//_a=a;cout<<"B"<<endl;}~B(){cout<<"~B"<<endl;}};int main() { A a;B b(1,2,a);cout<<"------结束---------"<<endl;} 


0 0
原创粉丝点击