2013-02-18 72 views
1

我無法理解虛函數。當我重載一個虛函數時,是否僅僅調用了新的派生函數?或者是派生函數和基函數?因爲我注意到,當調用虛擬析構函數時,基類AND派生類析構函數被調用。虛析構函數調用都衍生和基地的析構函數

+0

用什麼語言? – 2013-02-18 09:41:26

+0

我在C++中測試 – sgtHale 2013-02-18 09:43:10

回答

4

析構函數都是在這個特殊方面的特殊成員函數。
如果你有一個虛基類的析構函數,然後它會正確地調用基地以及派生類的析構函數刪除多態性期間(在基類指針調用pointinf刪除對派生類對象。)。

然而,其他虛成員函數不共享相同的特殊地位,析構函數。只有爲適當的對象類型定義的函數纔會被調用。如果您需要調用任何其他函數,則需要明確地執行此操作。

+0

好吧,這樣做更有意義。我想沒人會告訴我虛擬析構函數是特殊的。 – sgtHale 2013-02-18 09:50:49

+0

這不是說_virtual_析構函數是特殊的。所有析構函數都以這種方式工作,就像構造函數一樣,但不是常規函數。構造器和析構器在其他方面也是特殊的,例如他們沒有名字。 – MSalters 2013-02-18 11:07:39

2

一個派生類對象也不過是一種包裝的基類對象。 所以在析構函數的情況下,應該調用這兩個析構函數,這是一個預期的行爲。

在虛函數的情況下,你有機會替換功能的基礎class.so使用基類指針持有一個派生類對象將只調用虛函數在派生類中。

相關問題