一:什麼是多型。
物件導向語言有三大特點,封裝----繼承----多型。
今天就討論一下多型,多型是
當使用基類的指標或引用呼叫重寫的虛函式時,當指向父類呼叫的就是父類的虛函式,當指向子類就是呼叫子類的虛函式。
多型:多種形態。 多型分為靜態多型和動態多型。(實現多型的其中乙個條件必須是要把子類給給父類,要構成is-a的關係)
注意:必須是基類的指標或引用呼叫。不能是父類的物件(因為傳物件時,只是臨時拷貝,只能拿到成員資料,拿不到成員函式,而傳引用或指標就什麼都拿到)。
二:多型的物件模型--單繼承&多繼承
單繼承:
#include
using namespace std;
class base
virtual void func2()
private :
int a ;
};class derive : public base
virtual void func3()
virtual void func4()
private :
int b ;
};typedef void (* func) ();
void printvtable (int* vtable)
cout
return 0;}
剖析:
首先通過監視視窗分析
其次通過記憶體來看:
多繼承:
#include
using namespace std;
class base1
;class derive : public base1, public base2
cout<
可以通過監視視窗與記憶體分析得知:
三:多型的物件模型--菱形繼承和菱形虛擬繼承
}菱形繼承成員變數時需要虛繼承不然會造成二義性:程式無法跑過編譯
所以此時就需要菱形虛擬繼承才能結果問題:
**與源**相同只是稍微在兩個base類前加乙個virtual
分析:菱形虛擬繼承
分開來看 先看子類的函式:函式部分與上面一種情況的函式分布相同:
多型 多型物件模型
1 什麼多型?當使用基類的指標或引用呼叫重寫的虛函式時,指向父類調的就是父類的虛函式,指向子類調的就是子類的虛函式。下面我們來看一段 sizeof aa 的結果為什麼會是8呢?這是因為函式fun1是乙個虛函式,函式內部存在乙個虛表指標。單繼承物件模型 由於編譯器做了一定的優化,子類中自己定義的函式在...
多型 多型物件模型
理解多型 所謂多型,其實就是多種 形態 c 中虛函式的主要作用就是實現多型,簡單說父類的指標 引用呼叫重寫的虛函式,當父類指標 引用指向父類物件時呼叫的是父類的虛函式,指向子類物件時呼叫的是子類的虛函式。類別 1 編譯時的多型性。編譯時的多型性是通過過載來實現的。對於非虛的成員來說,系統在編譯時,根...
多型 多型物件模型
多型的實現條件 多型 與物件有關 到物件的虛表中找到 動態聯編 虛函式重寫 動態聯編 執行時決議 指標 引用 虛函式 靜態聯編 編譯時決議 與型別有關,像函式過載和通過物件名呼叫虛函式 1.定義乙個父類的指標,如果這個指標指向父類,呼叫父類的虛函式,指標指向子類,呼叫子類的虛函式,這樣可以使乙個函式...