class a
virtual void print() };
class b :public a
void print() };
class c :public b
void print() };
int main()
個人的淺顯理解,歡迎大神拍磚怒噴,
1 虛函式
虛函式可以看做介面, 乙個父類提供乙個虛函式,則 每個子類可以實現自己不同的版本,
用乙個父類的介面去實現不同的功能 如上用乙個父類指標指向不同的子類物件是分別呼叫不同的功能,
2虛析構函式
虛建構函式是不被允許的,虛析構函式是可以的 虛析構函式是為了子類記憶體能夠正確的被釋放,當建立乙個父類指標,
讓他例項化乙個子類物件 此時如果父類的析構函式不是虛析構函式則內存在釋放的時候直接delete p 是不會釋放除了父類記憶體塊以外的子類記憶體塊的
當然 delete時用dynamic_cast轉換為子類物件型別是會釋放, 更簡單的是直接把父類物件的析構函式設定為虛析構函式 此時
a *a1 = new b ; delete a1 是會正確的呼叫子類的析構函式的。不會擔心記憶體問題~~
3 純虛函式與抽象類
當乙個虛函式的函式說明是這樣的 virtual void a() = 0 這個函式就是純虛函式 ,這個函式所在的類就是抽象類
抽象類無法例項化物件無法作為引數和範圍值,抽象類也是用來提供介面和對實現整體功能的乙個抽象表現形式,具體功能的實現可以在子類中完成自己需要的各種版本
c 虛函式的理解
虛函式的作用 可以讓成員函式操作一般化,用基類的指標指向不同的派生類的物件時,基類指標呼叫其虛成員函式,則會呼叫其真正指向物件的成員函式,而不是基類中定義的成員函式 只要派生類改寫了該成員函式 若不是虛函式,則不管基類指標指向的哪個派生類物件,呼叫時都 會呼叫基類中定義的那個函式。示例 不使用虛函式...
對C 虛函式的理解
關於類不斷被繼承的過程,從整體上看,是乙個從抽象到逐漸具體化的過程,基類可以是非常非常抽象的東西,而最終例項化的派生類就非常具體了。虛函式的意義,就在於定義了乙個從最早的基類到最終的派生類都可能會用到 根據需求可以選擇重新實現還是不重新實現,但純虛函式必須實現,關於原因,我已經在其他文章說過 的乙個...
C 虛函式 純虛函式 虛析構函式的個人理解
離過年還有一周半,加緊完成自己的計畫,自律 自由!學習到c 多型,離不開的就是虛函式 純虛函式 虛析構函式,虛函式與純虛函式的核心就是vft和vft 這點原理不再多述 比較好的部落格羅列如下 對於將基類的析構函式用virtual關鍵字宣告,我個人的理解如下 個人理解在基類中將析構函式宣告為虛函式和多...