多型 多型物件模型

2021-08-10 15:22:40 字數 1611 閱讀 4432

理解多型:

所謂多型,其實就是多種「形態」。

c++中虛函式的主要作用就是實現多型,簡單說父類的指標/引用呼叫重寫的虛函式,當父類指標/引用指向父類物件時呼叫的是父類的虛函式,指向子類物件時呼叫的是子類的虛函式。

類別:

(1)編譯時的多型性。 

編譯時的多型性是通過過載來實現的。對於非虛的成員來說,系統在編譯時,根據傳遞的引數、返回的型別等資訊決定實現何種操作。

(2)執行時的多型性。 

執行時的多型性就是指直到系統執行時,才根據實際情況決定實現何種操作。c++中,執行時的多型性通過虛成員實現。

作用:

多型的目的則是為了介面重用。也就是說,不論傳遞過來的究竟是那個類的物件,函式都能夠通過同乙個介面呼叫到適應各自物件的實現方法.

構成多型時,和型別無關,和呼叫的物件有關。

int main()

執行結果:

在講解多型的單/多 繼承模型前,先介紹一下虛函式表

虛函式表是通過一塊連續的記憶體儲存虛函式位址的位址,這張表解決了繼承,虛函式(重寫)的問題,在有虛函式的例項物件中,都存在一張虛函式表,虛函式表就像是一張地圖,指明了實際應該呼叫的虛函式。

#include#includenamespace std;

typedef void(*fun) (); //定義乙個函式指標型別

//fun就是函式指標型別

class base

virtual void fun2()

private:

int d;

};class derive : public base

virtual void fun3()

virtual void fun4()

private:

int d;

};//

void print_table(int* vtable)

}int main()

上面這個圖是父類base的虛表

#includeusing namespace std;

typedef void(*fun) (); //定義乙個函式指標型別

void print_table(int* vtable)

}class base1

virtual void fun2()

private:

int b1;

};class base2

virtual void fun2()

private:

int b2;

};class derive : public base1,public base2

virtual void fun2()

virtual void fun3()

private:

int d;

};int main()

多重繼承中,子類會同時重寫多個父類中相同的函式,並且子類將自己的虛函式存放在第乙個繼承的虛函式表中。子類沒有自己的虛表,繼承第乙個父類的虛表

多型 多型物件模型

1 什麼多型?當使用基類的指標或引用呼叫重寫的虛函式時,指向父類調的就是父類的虛函式,指向子類調的就是子類的虛函式。下面我們來看一段 sizeof aa 的結果為什麼會是8呢?這是因為函式fun1是乙個虛函式,函式內部存在乙個虛表指標。單繼承物件模型 由於編譯器做了一定的優化,子類中自己定義的函式在...

多型 多型物件模型

一 什麼是多型。物件導向語言有三大特點,封裝 繼承 多型。今天就討論一下多型,多型是 當使用基類的指標或引用呼叫重寫的虛函式時,當指向父類呼叫的就是父類的虛函式,當指向子類就是呼叫子類的虛函式。多型 多種形態。多型分為靜態多型和動態多型。實現多型的其中乙個條件必須是要把子類給給父類,要構成is a的...

多型 多型物件模型

多型的實現條件 多型 與物件有關 到物件的虛表中找到 動態聯編 虛函式重寫 動態聯編 執行時決議 指標 引用 虛函式 靜態聯編 編譯時決議 與型別有關,像函式過載和通過物件名呼叫虛函式 1.定義乙個父類的指標,如果這個指標指向父類,呼叫父類的虛函式,指標指向子類,呼叫子類的虛函式,這樣可以使乙個函式...