继承中构造函数和析构函数的调用次序

1.构造函数
构造函数的调用次序(创建派生类对象时):
首先调用其基类的构造函数(调用顺序按照基类被继承时的声明顺序(从左向右))。
然后调用本类对象成员的构造函数(调用顺序按照对象成员在类中的声明顺序)。
最后调用本类的构造函数。


2.析构函数
撤销派生类对象时析构函数的调用次序与构造函数的调用次序相反:
首先调用本类的析构函数
然后调用本类对象成员的析构函数
最后调用其基类的析构函数


//Demo.h 


class C {
public:
         C( );   //构造函数
         ~C( ); //析构函数
};


class BASE {
public:
          BASE( );   // 构造函数
          ~BASE( )  // 析构函数
}; 


#include “Demo.h”                                                   //Demo.cpp


C::C( )   //构造函数
{   cout << "Constructing C object.\n"; }


C:: ~C( )  //析构函数
{   cout << "Destructing C object.\n"; }


BASE::BASE( )   // 构造函数
{   cout << "Constructing BASE object.\n";  }


BASE:: ~BASE( )  // 析构函数
{   cout << "Destructing BASE object.\n"; }


class DERIVED: public BASE {                          // Derived.h
public:
     DERIVED()           // 构造函数
    ~DERIVED()         // 析构函数
private:
C   mOBJ;
}; 


#include “Derived.h”                                         // Derived.cpp
                                        
DERIVED::DERIVED()           // 构造函数
{  cout << "Constructing derived object.\n";  }


DERIVED:: ~DERIVED()         // 析构函数
{  cout << "Destructing derived object.\n";    }


#include “Derived.h”  // Client.cpp


int main()
{
     DERIVED obj;  // 声明一个派生类的对象
                    // 什么也不做,仅完成对象obj的构造与析构
     return 0;
}


运行结果:
Constructing BASE object.
Constructing C object.
Constructing derived object.
Destructing derived object.
Destructing C object.
Destructing BASE object.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值