1. 程式人生 > >3.8 C++繼承機制下的析構函數

3.8 C++繼承機制下的析構函數

right clas const source color ner fix wrap 派生類的構造函數

參考:http://www.weixueyuan.net/view/6365.html

總結:

  構造函數的執行順序是按照繼承順序自頂向下的,從基類到派生類,而析構函數的執行順序是按照繼承順序自下向上,從派生類到基類。  

  因為每一個類中最多只能有一個析構函數,因此調用的時候並不會出現二義性,因此析構函數不需要顯式的調用。 創建派生類對象時構造函數的調用順序是按照繼承順序,先執行基類構造函數,然後再執行派生類的構造函數。但是對於析構函數,其調用順序是正好相反的,即先執行派生類的構造函數,然後再執行基類的構造函數。

例1:
#include <iostream>
using
namespace std; class A { public: A(){cout<<"A constructor"<<endl;} ~A(){cout<<"A destructor"<<endl;} }; class B: public A { public: B(){cout<<"B constructor"<<endl;} ~B(){cout<<"B destructor"<<endl;} }; class C: public B { public: C(){cout
<<"C constructor"<<endl;} ~C(){cout<<"C destructor"<<endl;} }; int main() { C test; return 0; }


在本例中定義了三個類,C類繼承自B類,B類繼承自A類。在每個類中定義默認構造函數和析構函數。在主函數中我們定義了C類的一個對象,創建對象時各個類的構造函數會被調用,之後退出程序,各類的析構函數會被逐一調用。程序運行結果如下:
A constructor
B constructor
C constructor
C destructor
B destructor
A destructor

程序運行結果很好地說明了構造函數和析構函數的執行順序。構造函數的執行順序是按照繼承順序自頂向下的,從基類到派生類,而析構函數的執行順序是按照繼承順序自下向上,從派生類到基類。

因為每一個類中最多只能有一個析構函數,因此調用的時候並不會出現二義性,因此析構函數不需要顯式的調用。

3.8 C++繼承機制下的析構函數