多型分為靜態多型和動態多型。靜態多型是通過過載和模板技術實現,在編譯的時候確定。動態多型通過虛函式和繼承關係來實現,執行動態繫結,在執行的時候確定。動態多型實現有幾個條件:
(1)多型分為靜態多型和動態多型。靜態多型是通過過載和模板技術實現的,在編譯的時候確定。動態多型通過虛函式和繼承關係來實現,執行動態繫結,在執行的時候確定。動態多型實現有幾個條件:
1、用virtual關鍵字申明的函式叫做虛函式,虛函式肯定是類的成員函式。
2、存在虛函式的類都有乙個一維的虛函式表叫做虛表。類的物件有乙個指向虛表開始的虛指標。虛表是和類對應的,虛表指標是和物件對應的。
3、多型性是乙個介面多種實現,是物件導向的核心。分為類的多型性和函式的多型性。
4、多型用虛函式來實現,結合動態繫結。
5、純虛函式是虛函式再加上= 0。並且該函式只有宣告,沒有實現。
6、抽象類是指包括至少乙個純虛函式的類。
虛函式表示針對類的,編譯器為每乙個類維護乙個虛函式表,虛函式表在編譯的時候就確定了,每個物件的首位址儲存著該虛函式表的指標,而類物件的虛函式指標vptr就是在執行階段確定的,這是實現多型的關鍵。
為了實現多型進行動態繫結,將派生類物件指標繫結到基類指標上,物件銷毀時,如果析構函式沒有定義成虛析構函式,則會呼叫基類的析構函式,子類的資料沒辦法析構,造成記憶體洩露。如果要呼叫物件的析構函式,就需要將該物件的析構函式定義為虛函式,銷毀時通過虛函式表找到物件的析構函式。
C 多型性分析之虛函式表
c 中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。這種技術可以讓父類的指標有 多種形態 這是一種泛型技術。所謂泛型技術,說白了就是試圖使用不變的 來實現可變的演算法。比如 模板技術,rtti技術,虛函式技術,...
C 多型性與虛函式
物件導向程式設計中的多型性是指向不同的物件傳送同乙個訊息,不同物件對應同一訊息產生不同行為。在程式中訊息就是呼叫函式,不同的行為就是指不同的實現方法,即執行不同的函式體。也可以這樣說就是實現了 乙個介面,多種方法 從實現的角度來講,多型可以分為兩類 編譯時的多型性和執行時的多型性。前者是通過靜態聯編...
C 多型性 與 虛函式
1.運算子過載 運算子過載形式 1 過載為類的成員函式 運算子過載函式說明為類的成員函式的格式為 類名 operator 運算子 參數列 如 c1 c2 編譯器將給出的解釋為 c1.operator c2 該運算子過載函式僅僅有乙個引數,所以過載為成員函式時,雙目運算子僅有乙個引數。對於單目運算子,...