c 虛函式 的理解

2021-07-07 03:50:17 字數 786 閱讀 2966

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關鍵字宣告,我個人的理解如下 個人理解在基類中將析構函式宣告為虛函式和多...