说明派生类对象时,
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;
}