虛函式之虛函式表

2021-06-19 00:50:54 字數 772 閱讀 9975

多型性可分為兩類:靜態多型和動態多型。函式過載和運算子過載實現的多型屬於靜態多型,動態多型性是通過虛函式實現的。

每個含有虛函式的類有一張虛函式表(vtbl),表中每一項是乙個虛函式的位址, 也就是說,虛函式表的每一項是乙個虛函式的指標。

沒有虛函式的c++類,是不會有虛函式表的。

兩張圖:

簡單例子:

#include #include using namespace std;

class base

virtual void g()

virtual void h()

};class base2

virtual void g()

virtual void h() };

class base3

virtual void g()

virtual void h() };

class derive : public base1, public base2, public base3

virtual void g1() };

typedef void(*fun)(void);

int main()

虛函式表指標,虛函式表

對c 了解的人都應該知道虛函式 virtual function 是通過一張虛函式表 virtual table 來實現的。簡稱為v table。在這個表中,主是要乙個類的虛函式的位址表,這張表解決了繼承 覆蓋的問題,保證其容真實反應實際的函式。這樣,在有虛函式的類的例項中這個表被分配在了 這個例項...

虛指標,虛函式,虛函式表,純虛函式

虛指標 虛繼承 在使用多重繼承時,如存在 class a 有m a變數 class a1 virtual public a,m a1 class a2 virtual public a m a2 class b public a1,public a2 m b 時 存在以下記憶體儲存順序 虛指標 指向...

虛函式與虛函式表

當類中有虛函式時,類的大小會多4個位元組 多出的這4個位元組是乙個位址,指向一張表,裡面儲存了所有虛函式的位址 虛函式表 class base virtual void function 2 virtual void function 3 class sub public base virtual ...