離過年還有一周半,加緊完成自己的計畫,自律==自由!
學習到c++多型,離不開的就是虛函式/純虛函式/虛析構函式,虛函式與純虛函式的核心就是vft和vft*,這點原理不再多述
比較好的部落格羅列如下:
***:
***:
對於將基類的析構函式用virtual關鍵字宣告,我個人的理解如下:
個人理解在基類中將析構函式宣告為虛函式和多型的原理一致
而且只用在基類中宣告虛函式使用virtual關鍵字,在子類以及孫類以及以後都不用再寫virtual關鍵字,因為它們都是虛擬的
將基類的析構函式宣告為virtual後,構造派生類物件時過程如下:
1.構造基類物件,先構造vft及vft*,記錄基類虛析構函式
2.構造子類物件(除基類物件剩餘部分),更新vft, 將其中的虛析構函式換成子類的虛析構函式
所以當基類指標指向派生類物件時, 並delete,調的就是派生類的析構函式
這種過程對於多重繼承也適用,因為每繼承一次, 頭部的vft*指向的vft就會更新一次
需要注意的是, 在多型行為中, 乙個物件只有乙個vft和vft*
**如下:
注意到**中有呼叫delete函式的三個過載版本,
C 虛函式,純虛函式,虛析構和純虛析構
c 虛函式 定義為虛函式是為了允許用基類的指標來呼叫子類的這個函式,是需要具體實現的 virtual void funtion1 c 純虛函式 一 定義 純虛函式是在基類中宣告的虛函式,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛函式的方法是在函式原型後加 0 vir...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...