練習**,該說的都在**和注釋裡:
1 #include 23class
baseclass 417
18//
將析構函式設定為虛函式,以便在應用多型特徵的時候,能夠呼叫子類的析構函式釋放子類動態申請的空間
19virtual ~baseclass()
2023
virtual
void
to_string()
2427
void
do_something()
2831
};32
33class derivedclasspub : public
baseclass
3449 ~derivedclasspub()
5057
void
to_string()
5861
void
do_something()
6265
};66
67class derivedclasspro : protected
baseclass
6876 ~derivedclasspro(){}
77};
7879
class derivedclasspri : private
baseclass
8088 ~derivedclasspri(){}
89};
9091
class
anotherbaseclass
9298 ~anotherbaseclass()
99102
};103
class anotherderivedclass : public
anotherbaseclass
104110 ~anotherderivedclass()
111114
};115
116int
main()
117
輸出結果:
呼叫父類的建構函式!呼叫父類的to_string:我是父類!
呼叫子類的建構函式!
呼叫子類的to_string:我是子類!我的名字是:小強
>>當析構函式是虛函式時:
呼叫子類的析構函式!
呼叫父類的析構函式!
《結束!
呼叫父類的建構函式!
呼叫子類的建構函式!
>>當析構函式不是虛函式時:
呼叫父類的析構函式!
《結束!
呼叫父類的建構函式!
呼叫父類的to_string:我是父類!
呼叫子類的建構函式!
呼叫子類的to_string:我是子類!我的名字是:小強
>>當析構函式是虛函式時:
呼叫子類的析構函式!
呼叫父類的析構函式!
《結束!
呼叫父類的建構函式!
呼叫子類的建構函式!
>>當析構函式不是虛函式時:
呼叫子類的析構函式!
呼叫父類的析構函式!
《結束!
請按任意鍵繼續. . .
繼承(多型和虛析構函式)
派生類不能直接訪問基類的私有成員,必須通過基類方法進行訪問。建立派生類物件時,首先建立基類物件。也就是說基類物件在程式進入派生類建構函式之前被建立。c 使用成員初始化列表來完成。派生類建構函式初始化基類私有成員,採用成員初始化列表。總結 首先,若基類函式需要被派生類重定義,則需要將其在基類宣告為虛函...
繼承和多型二 虛析構函式
雖然我們已經知道了什麼是繼承和多型,也明白了多型依賴於繼承,但是在多型中存在哪些問題呢?多型中可能存在的記憶體洩露問題 例如下面的程式中,在圓形circle的類中定義乙個圓心的座標,並且座標是在堆中申請的記憶體,則在mian函式中通過基類指標操作派生類物件的成員函式是沒有問題的,可是在銷毀物件記憶體...
C 虛析構函式和純虛析構函式
我們知道析構函式是在物件生命週期結束時自動被呼叫,用來做一些清理工作 如釋放控制代碼,釋放堆記憶體等 防止出現記憶體洩漏。那怎麼還有虛析構函式呢?使用虛析構函式的類一般是要作為基類,被其他類繼承。通過把基類的析構函式宣告為虛函式,就可以通過父類指標來釋放子類物件,從而完成子類的一些清理工作,防止出現...