學習繼承和虛析構函式

2022-08-30 07:42:08 字數 1610 閱讀 6264

練習**,該說的都在**和注釋裡:

1 #include 23

class

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 虛析構函式和純虛析構函式

我們知道析構函式是在物件生命週期結束時自動被呼叫,用來做一些清理工作 如釋放控制代碼,釋放堆記憶體等 防止出現記憶體洩漏。那怎麼還有虛析構函式呢?使用虛析構函式的類一般是要作為基類,被其他類繼承。通過把基類的析構函式宣告為虛函式,就可以通過父類指標來釋放子類物件,從而完成子類的一些清理工作,防止出現...