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