C 學習記錄 多型

2021-10-19 12:00:37 字數 1348 閱讀 9879

多型是物件導向的三大特性之一。

多型:多型即呼叫成員函式時,會根據呼叫函式的物件的型別來執行不同的函式。

多型分為兩類

引入虛函式,就是為了通過函式重寫實現多型的效果。

動態多型需要滿足的條件:

動態多型的使用條件:

#include

#include

using

namespace std;

class

base};

class

son:

public base };

// c++中 有自動的父子類 型別轉換

void

speak

(base &person)

intmain()

類中定義了虛函式的話,例項化乙個物件 a 以後,就會在 a 中產生乙個虛函式指標vfptr,指向虛函式表(vftable)。

簡而言之,子類在虛函式表中替換了重寫函式的那條記錄。

純虛函式語法:virtual 返回值型別 函式名 (引數列表) = 0,無需大括號。

抽象類特點:

class

base

;class

son:

public base };

intmain()

作用:

問題:多型使用時(父類指標或引用指向了子類),如果子類中有屬性開闢到了堆區,那麼父類指標在釋放時無法呼叫子類的析構**。

解決辦法:將父類中的析構函式改為虛的或者純虛的。

測試**:

#include

#include

using

namespace std;

class

base

~base()

};class

son:

public base

son()~

son()}

;int

main()

輸出:

base構造

son構造

base析構

在base析構前邊,沒有son析構,如果子類中在堆區開了空間,那就會造成記憶體洩漏。

此時,如果把base類中的析構函式加上virtual修飾,變成乙個虛函式,那麼在釋放父類指標的時候,就會觸發子類的析構函式了,把子類釋放掉。

C 多型學習記錄

純虛函式和抽象類 class base class son public base void test01 intmain 虛析構和純虛析構 1 多型使用時,如果子類中有屬性開闢到堆區 new 那麼父類指標在釋放時無法呼叫到子類的析構函式。上述問題的解決方式為 將父類中的析構函式改為虛析構或者純虛析...

c 多型(學習記錄四)

c 多型 學習記錄四 同乙個操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果,這就是多型性,即採用基類的引用指向子類的物件。多型解決了 復用,同時解決了專案緊耦合問題,提高程式的可擴充套件性。應用程式不必對每乙個派生類編寫功能呼叫,只需對抽象基類及逆行處理即可,提公升 復用性。在類得定義中...

C 學習筆記之多型 多型的學習 多型學習

c 學習筆記之多型 多型的學習 多型學習 多型分為兩類 靜態多型 函式過載和運算子過載屬於靜態多型,復用函式名 動態多型 派生類和虛函式實現執行時多型 靜態多型和動態多型的區別 靜態多型的函式位址早繫結 編譯階段確定函式位址 動態多型的函式位址晚繫結 執行階段確定函式位址 動態多型滿足條件 動態多型...