在visual studio中,新建控制台工程,構造類如下:
#include
using namespace std;
class cbase
~cbase()
};class cderive :public cbase
~cderive()
};對應不同的指標進行 delete 操作,結果如下:
(i)int main(int argc, char* argv)
執行結果:
s:\computertech\vs2015\release>test.exe
cbase():constructor
cderive():constructor
cbase(): destructor
(ii)
int main(int argc, char* argv)
執行結果:
s:\computertech\vs2015\release>test.exe
cbase():constructor
cderive():constructor
cderive(): destructor
cbase(): destructor
(iii)
int main(int argc, char* argv)
執行結果:
s:\computertech\vs2015\release>test.exe
cbase():constructor
cderive():constructor
cbase(): destructor
(iv)
int main(int argc, char* argv)
執行結果:
s:\computertech\vs2015\release>test.exe
cbase():constructor
cderive():constructor
cderive(): destructor
cbase(): destructor
總結:由上面的實驗結果可以看出,當 new cderive() 時,會先執行基類的建構函式,然後再執行派生類的建構函式;
而當 delete pointer 時,編譯器只考慮 pointer 指標本身的型別而不關心 pointer 實際指向的型別,即:若 pointer 為基類指標,則只呼叫基類的析構函式(不管 pointer 實際指向的是基類還是派生類);若 pointer 是派生類指標,則先呼叫派生類的析構函式,再呼叫基類的析構函式,呼叫順序與呼叫建構函式的順序相反。
C 基類和派生類的析構函式
和建構函式類似,析構函式也不能被繼承。與建構函式不同的是,在派生類的析構函式中不用顯式地呼叫基類的析構函式,因為每個類只有乙個析構函式,編譯器知道如何選擇,無需程式設計師干涉。另外析構函式的執行順序和建構函式的執行順序也剛好相反 建立派生類物件時,建構函式的執行順序和繼承順序相同,即先執行基類建構函...
模板基類派生類的建構函式和析構函式
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 拷貝建構函式將過載模板基類的拷貝建...
C 派生類的構造和析構函式
派生類的目的是為了發展,派生類繼承了積累的成員,實現了原有 的重用,這只是一部分 而 的擴充才是最主要的,只有通過新增新的成員,加入新的功能,類的派生才有實際意義。派生類的建構函式只負責對新增的成員進行初始化,對所有從基類 繼承來的成員,其初始化工作還是由基類的建構函式完成。同樣,對派生類物件的掃尾...