有繼承、有虛函式(virtual)重寫、有父類指標(引用)指向子類物件。
在基類中使用virtual定義虛函式,告訴編譯器這個函式要支援多型;而不是根據指標型別判斷如何呼叫;而是要根據引用或指標所繫結的物件的真實型別。
一旦某個函式被宣告為虛函式,則在所有派生類中它都是虛函式(不管有沒有virtual)。
當類中宣告虛函式時,編譯器會在類中生成乙個
虛函式表;虛函式表是乙個儲存
類成員函式指標的資料結構;virtual成員函式會被編譯器放入虛函式表中。
存在虛函式時,在建立的每個物件中都有乙個指向虛函式表的指標(vptr指標)
例如:class parent};
class child : public parent };
void howtoplay(parent *base)
void main()
說明:1)通過虛函式表指標vptr呼叫重寫函式是在程式執行時進行的,因此需要通過定址操作才能確定真正應該呼叫的函式。而普通成員函式是在編譯時就確定了呼叫的函式。
在效率上,虛函式的效率要低很多。
2)出於效率考慮,
沒有必要將所有成員函式都宣告為虛函式。
3)c++編譯器,執行howtoprint函式,不需要區分是子類物件還是父類物件
C 多型及其實現原理
1.多型的定義 多型含義為乙個事物有多種形態。在c 程式設計中,多型性是指具有不同功能的函式可以用同乙個函式名,這樣就可以用乙個函式名呼叫不同內容的函式,主要分為靜態多型和動態多型 動態多型 就是通過繼承重寫基類的虛函式實現的多型,因為是在執行時確定決議,所以稱為動態多型。執行時在虛函式表中尋找呼叫...
C C 多型及其實現原理
c c 多型及其實現原理 多型的介紹 多型含義為乙個事物有多種形態。在c 程式設計中,多型性是指具有不同功能的函式可以用同乙個函式名,這樣就可以用乙個函式名呼叫不同內容的函式。一般來說多型分為兩種 靜態多型 也稱為編譯時多型,主要包括引數多型,過載多型和強制多型。引數多型 採用引數化模板,通過給出不...
LFU原理及其實現(C )
讀完本文,你不僅學會了演算法思路,還可以順便去 leetcode 上拿下如下題目 460.lfu快取機制 lru 演算法的淘汰策略是 least recently used,也就是每次淘汰那些最久沒被使用的資料 而 lfu 演算法的淘汰策略是 least frequently used,也就是每次淘...