继承与派生之析构函数

     派生类的析构函数一般只需要在其函数体中清理新增成员就可以了,对于继承的基类成员和派生类内嵌对象成员的清理,则一般由系统自动调用基类和对象成员的析构函数来完成。这个执行过程的顺序正好和派生类构造函数相反:1.执行析构函数语句清理派生类的新增成员;2.调用内嵌对象成员所属类的析构函数清理派生类内嵌对象成员,各个对象成员的清理顺序与其在构造函数中的构造顺序相反;3.调用基类的析构函数清理继承的基类成员,如果是多继承则各个基类的清理顺序也与其在构造函数中的构造顺序相反。总起来一句话,析构函数执行时所有成员或对象的清理顺序与构造函数的构造顺序刚好完全相反

例子如下:

 #include <iostream>
 using namespace std;

class Base1 // 基类Base1
{
  public:
     Base1()  { cout<<"Base1 construct"<<endl; } // Base1的构造函数
     ~Base1() { cout<<"Base1 destruct"<<endl; }  // Base1的析构函数
};

class Base2 // 基类Base2
{
  public:
     Base2(int x) { cout<<"Base2 construct "<<x<<endl; } // Base2的构造函数
      ~Base2() { cout<<"Base2 destruct"<<endl; } // Base2的析构函数
};

class Base3 // 基类Base3
{
  public:
     Base3(int y) { cout<<"Base3 construct "<<y<<endl; } // Base3的构造函数
     ~Base3() { cout<<"Base3 destruct"<<endl;} // Base3的析构函数
};

class Child : public Base2, public Base1, public Base3 // 派生类Child
{
  public:
     Child(int i,int j,int k,int m):Base2(i),b3(j),b2(k),Base3(m){ }
  private: // 派生类的内嵌对象成员
     Base1 b1;
     Base2 b2;
     Base3 b3;
};
       
int main()
{
     Child child(3,4,5,6);
     return 0;
}

运行结果为:

Base2 construct

Base1 construct

Base3 construct

Base1 construct

Base2 construct

Base3 construct

Base3 destruct

Base2 destruct

Base1 destruct

Base3 destruct

Base1 destruct

Base2 destruct

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值