一,概述
1)介面的多種不同的實現方式即為多型。
2)多型性是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡單的說,就是一句話:允許將子類型別的指標賦值給父類型別的指標。多型性在c++中都是通過虛函式(virtual function) 實現的。
3)關鍵點:多型還有個關鍵之處就是一切用指向基類的指標或引用來操作物件
二,示例
1)普通的物件操作方式
#include using namespace std;
class a
輸出:this is a
this is a
這跟我們預期的不一樣
3)採用多型,就是在父類函式前面加上virtual
根據不同的類物件,呼叫其相應的函式,這個函式就是虛函式
#include using namespace std;
class a
三,虛函式高階
void (a::*fun)(); //定義乙個函式指標
a *p=new b;
fun=&a::fun;//是真正獲得虛函式的位址嗎? 其實間接獲得虛函式位址的一段**的位址
#include using namespace std;
class a
int main()
四,補充重要知識
例項化類的虛函式必須有定義,原因如下:有虛函式作為成員函式的類, 它的例項化-物件, 在執行過程分配到的記憶體不止是它的成員資料, 還有乙個指向該類虛函式表(vtable)的指標, 虛函式表中的每個資料項都是乙個虛函式的入口位址;
如果乙個物件的虛函式只有宣告而沒有實現, 就會出現這個
虛函式表找不到本應作為其資料項之一的某函式的入口位址
, 虛函式表在執行前不能裝載完成, 所以產生連線錯誤!
類的多型問題
class program public class a public virtual void show public class b a publicnewvirtual void show 覆蓋父類a的方法 public class c b public override void show ...
Python 類的多型
python的多型 class dog defeat self print i am dog eat something class cat defeat self print i am cat eat somthing 多型的呼叫形式 defanimal eat one one.eat d dog...
C 類的多型
多型按字面的意思就是多種形態。當類之間存在層次結構,並且類之間是通過繼承關聯時,就可能會用到多型。c 多型就是當呼叫成員函式時,會根據呼叫函式的物件的型別來執行不同的函式。我們以前說過的函式過載就是乙個簡單的靜態多型,靜態多型是編譯器在編譯期間完成的,編譯器會根據實參型別來選擇呼叫合適的函式,如果有...