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

来源:互联网 发布:svn linux登录 编辑:程序博客网 时间:2024/05/21 09:05
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.

0 0
原创粉丝点击