继承与组合混搭情况下,构造和析构调用原则
先说结论
原则: 先构造父类,再构造成员变量、最后构造自己
先析构自己,在析构成员变量、最后析构父类
注
先构造的对象,后释放
class my //创建一个成员类
{
public:
int a;
my (int a=0)
{
this ->a=a;
cout<<"my running"<<endl;
}
~my()
{
cout<<"my end"<<endl;
}
};
class AA
{
public:
int a;
int b;
public: AA (int a=0,int b=0)
{
this->a=a;
this->b=b;
cout<<"AA running"<<endl;
}
~AA ()
{
cout<<"AA end"<<endl;
}
};
class BB : public AA
{
public:
int c;
my gg; //定义一个成员变量
public: BB (int a=0) :AA(3,4) ,gg(2) //调用父类的析构和成员类的析构来初始化
{
this->c=a;
cout<<"BB running"<<endl;
}
~BB ()
{
cout<<"BB end"<<endl;
}
void prt()
{
cout<<a<<b<<c<<endl;
}
};
int main(int argc, char *argv[])
{
BB a(1);
a.prt();
return 0;
}
最后可以发现和结论相同