和建構函式類似,析構函式也不能被繼承。與建構函式不同的是,在派生類的析構函式中不用顯式地呼叫基類的析構函式,因為每個類只有乙個析構函式,編譯器知道如何選擇,無需程式設計師干涉。
另外析構函式的執行順序和建構函式的執行順序也剛好相反:
建立派生類物件時,建構函式的執行順序和繼承順序相同,即先執行基類建構函式,再執行派生類建構函式。
而銷毀派生類物件時,析構函式的執行順序和繼承順序相反,即先執行派生類析構函式,再執行基類析構函式。
請看下面的例子:
#include
using namespace std;
classa~
a()}
;classb:
public a~b
()};
classc:
public b~c
()};
intmain()
執行結果:
a constructor
b constructor
c constructor
c destructor
b destructor
a destructor
基類和派生類析構函式執行順序
下面是自己實驗結果 沒有宣告虛函式時 include using namespace std class base base class derived public base derived int main 輸出 base contruction derived contruction 1 ba...
C 基類和派生類構造和析構函式的順序!
在visual studio中,新建控制台工程,構造類如下 include using namespace std class cbase cbase class cderive public cbase cderive 對應不同的指標進行 delete 操作,結果如下 i int main int...
模板基類派生類的建構函式和析構函式
include stdafx.h template class a a t c a a a a a operator a a template class b public a b t c a c 非預設建構函式不會呼叫模板基類的非預設建構函式 b b b a b 拷貝建構函式將過載模板基類的拷貝建...