3.8 C++繼承機制下的解構函式

來源:互聯網
上載者:User

標籤:containe   clear   span   only   include   對象   類對象   des   繼承   

參考: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++繼承機制下的解構函式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.