和構造函數類似,析構函數也是不能被繼承的。
創建派生類對象時,構造函數的調用順序和繼承順序相同,先執行基類構造函數,然后再執行派生類的構造函數。但是對于析構函數,調用順序恰好相反,即先執行派生類的析構函數,然后再執行基類的析構函數。
請看下面的例子:
#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;}
運行結果:
A constructorB constructorC constructorC destructorB destructorA destructor
從運行結果可以很明顯地看出來,構造函數和析構函數的執行順序是相反的。
需要注意的是,一個類只能有一個析構函數,調用時不會出現二義性,所以析構函數不需要顯式地調用。
新聞熱點
疑難解答
圖片精選