多型是c++物件導向三大特性之一
多型分為靜態多型和動態多型
靜態多型:函式過載 和 運算子過載屬於靜態多型,復用函式名。
動態多型:類的繼承和虛函式實現執行時的多型。
二者的區別:
(由於早晚繫結,就會產生一些區別)
1.下面複習一下,有無虛函式的差別。(其實就是子類物件的是否覆蓋的問題) 虛函式宣告只能寫在類定義的函式原型宣告中,而不能寫在成員函式實現之時。
//多型滿足條件:
//1、有繼承關係
//2、子類重寫父類中的虛函式
//多型使用:
//父類指標或引用指向子類物件
#includeusing namespace std;
class animal
};class cat :public animal
};//父類引用或者父類指標的時候才會體現出虛函式有無的差異,通過子類直接無法體現
void speak(animal &ani)
void test()
int main()
虛函式動態繫結的實現原理:
先講述兩個概念:虛函式表(vftable)和虛函式表指標(vfptr)
設定了虛函式後:二者隨即出現.
下面兩幅圖是通過開發人員工具得到的虛函式表示意圖:可以驗證上面的說法。
順帶介紹如何使用vs開發人員工具來檢視虛函式列表和記憶體分布的方法:
1.先開啟 developer command prompt
2.然後回到我們建立的cpp工程檢視路徑(不要直接複製完整路徑)
3.回到developer command prompt的命令列視窗
輸入: cd 剛才複製的路徑
定位到該資料夾之後 再輸入dir
4.下面再使用c1 /d1 reportsingleclasslayout命令(小心,cl這裡的是乙個英文本母l,而不是數字1,後面那個d1才是數字1)
以這個為例: cl /d1 reportsingleclasslayoutanimal "賦值運算子=過載.cpp"
前面的白色部分就是固定**部分,紅字表示你想看的類名,綠字表示cpp名字,我們只需要輸入前幾個字元(連雙引號都不用打),然後按tab鍵就能自動補全。
然後就能出來我們想要的虛函式表:(如果**改動,一定要編譯後再來重新檢視,否則和原結果一樣)
c 多型的定義和實現
編譯時多型 在程式編譯過程 現,發生在模板和函式過載中 泛型程式設計 執行時多型 在程式執行過程 現,發生在繼承體系中,是指通過基類的指標或引用訪問派生類中的虛函式。多型就是不同繼承類的物件,對同一訊息做出的不同響應,基類的指標指向或繫結到派生類的物件,使得基類指標呈現不同的表現形式。構成多型的條件...
第12章 1 多型基本定義
目的 通過相同的介面訪問不同的函式 定義概述 指不同物件接收到相同訊息時,根據物件類的不同而產生不同的動作 操作方式 函式過載 過載規則 引數個數或型別有所差別 函式的引數完全相同但屬於不同的類 過載特例 虛函式 特點 當基類中的某個成員函式被宣告為虛函式後,其就可以在派生類中被重新定義 定義形式 ...
多型定義 多型實現 多型分類。
1.多型定義 同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果,這就是多型性。簡單的說 就是用基類的引用指向子類的物件。2.如何實現多型 c 中的多型只能通過指向基類型別的指標和引用來呼叫物件的虛函式來實現。實現多型有三種方式 虛方法,抽象方法,介面。虛方法 子類重寫父類中的方法,對父...