多型概念
同乙個事物在不同環境下具有不同的狀態
虛函式概念
在函式返回值前加上 virtual 關鍵字
多型分類
靜態多型(早繫結):在編譯器編輯時確認要呼叫的函式
1、 函式過載
2、泛型程式設計
動態多型(晚繫結):在程式執行時確認將要呼叫的函式
1、 基類中存在虛函式
2、繼承當中對基類進行重寫並且
3、通過物件的指標或者引用對基類的虛函式進行呼叫
多型例子
公共測所分男女進行使用
對於乙個人類來說,不明確到底呼叫男廁還是女廁
將人類繼承為男人類以及女人類,並且對上廁所函式進行重寫
在傳參時,便可分辨到底呼叫男類還是女類中的上廁所函式
多型形成條件
1、 基類中存在虛函式
2、 繼承當中對基類進行重寫並且
3、 通過物件的指標或者引用對基類的虛函式進行呼叫
重寫
在派生類中重寫的函式與基類中的對應函式的原型一致 即函式返回值函式名以及引數列表均相同
重寫特例
1、協變(返回值型別可以不一樣)
2、析構函式(其函式名不同)
不可定義為虛函式的成員函式
1、建構函式與拷貝建構函式(呼叫該函式時並沒有物件,所以無法通過物件進行指標或引用的呼叫)
2、友元函式(友元函式不是類的成員函式)
3、 static修飾的靜態成員函式(靜態成員函式無法通過物件指標呼叫)
抽象類(介面類)的概念
含有純虛函式的類
純虛函式指 在虛函式的引數列表後面加上『= 0』
多型呼叫原理
1、派生類物件在其記憶體中的前四個位元組中維護了一張虛表的入口位址
2、虛函式的呼叫
(1)先通過指標找到虛表的入口
(2)傳遞對應的引數(this指標,以及當前虛函式的引數)
(3)從虛表中取得對應的虛函式
(4)呼叫該虛函式
不同繼承下帶有虛函式的物件模型
1、單繼承
(1)先將基類中的虛函式拷貝到派生類中
(2)如果派生類對該虛函式進行重寫,那麼則替換虛表中相同偏移量的位置的虛函式為子類的虛函式
(3)如果派生類有新增的虛函式,則將該虛函式的位址按照次序(新增虛函式有多個)放在虛表的最後
2、多繼承
(1)先將基類中的虛函式拷貝到派生類中
(2)如果派生類對該虛函式進行重寫,那麼則替換虛表中相同偏移量的位置的虛函式為子類的虛函式
(3)將派生類新增的虛函式位址按照宣告的次序放在第乙個基類虛表的最後
3、菱形繼承
4、虛擬繼承
5、菱形虛擬繼承
謝謝!!!!!
c 多型總結
多型 多型可以簡單地概括為 乙個介面,多種方法 程式在執行時才決定呼叫的函式,它是物件導向程式設計領域的核心概念。接下來,我寫乙個簡單地函式來說明多型 includeusing namespace std int add int left,int right float add float left...
C 多型總結
多型繫結分兩種情況,一種是靜態繫結即編譯時多型,一種是動態繫結即執行時多型是利用過載實現的。對於非虛函式的成員來說,系統在編譯時,按照函式的引數的區別來繫結要實現的操作,在編譯時就確定了呼叫哪個函式。簡單地說,虛函式是動態繫結的基礎 動態繫結是實現執行時多型的基礎。要觸發動態繫結,需滿足兩個條件 1...
c 多型總結
1 c 中通過virtual關鍵字對多型進行支援,使用virtual宣告的函式被重寫後即可展現多型特性。注意和虛繼承的區別。雖然用的是同乙個關鍵字,但意義完全不同。2 多型的意義 多型可以使用未來,80年 了乙個框架,可以呼叫90年 的 多型是設計模式的基礎,多型是框架的基礎。3 多型成立的條件 3...