多型 多型物件模型

2021-08-10 13:07:00 字數 2713 閱讀 3730

一:什麼是多型。

物件導向語言有三大特點,封裝----繼承----多型。

今天就討論一下多型,多型是

當使用基類的指標或引用呼叫重寫的虛函式時,當指向父類呼叫的就是父類的虛函式,當指向子類就是呼叫子類的虛函式。

多型:多種形態。 多型分為靜態多型和動態多型。(實現多型的其中乙個條件必須是要把子類給給父類,要構成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.定義乙個父類的指標,如果這個指標指向父類,呼叫父類的虛函式,指標指向子類,呼叫子類的虛函式,這樣可以使乙個函式...