菱形繼承的虛函式表

2021-07-27 08:36:40 字數 1018 閱讀 4764

虛函式:類的成員函式前面加virtual

虛函式的主要作用就是實現多型

那麼多型:顧名思義就是一種事物的多種形態。c++中,指具有不同功能的函式可以用同乙個函式名,這樣可以用乙個函式名呼叫不同內容的函式。

虛函式表(虛表):通過一片連續的位址來儲存虛函式的位址

菱形繼承舉例:

說明:若子類中有虛函式,而所繼承的父類中沒有虛函式,則子類就有自己的虛表指標。當父類中有虛函式,則子類的虛表放在第乙個繼承的父類中。

cc繼承aa,因為aa中有虛函式,cc的虛表放在aa的虛表指標中,沒有自己的虛表指標。同理dd也是,繼承bb和cc,所以dd的虛表放在第乙個繼承即bb中。然而bb和cc重寫了aa的虛函式,當然沒有自己虛表指標。

帶有虛函式的菱形繼承和帶有虛函式的菱形虛繼承

對於某些函式來說,基類希望它的派生類定義適合自身的版本,此時基類就將這些函式宣告為虛函式。在存在虛函的類,建立物件時會產生虛表指標,虛表指標指向乙個虛表,這時就可以通過虛表訪問自己定義的函式。通過下面兩種繼承進行分析 帶有虛函式的菱形繼承 以下圖的模型為例進行分析 我們觀察c類物件在記憶體中的結構 ...

菱形繼承和菱形虛繼承

繼承是c 的一大特點,我們通過菱形繼承和菱形虛繼承對繼承進行進一步的分析。菱形繼承 建立乙個基類a讓b1和b2公有繼承於它,讓c公有繼承b1和b2。class a a int a class b1 public a b1 int b1 class b2 public a b2 int b2 clas...

虛繼承與虛函式表

一 虛繼承 1 include iostream using namespace std class bvoid fb class d1 virtual public bvoid fd1 class d2 virtual public bvirtual void vd2 void fd2 class...