C 學習 (03)虛函式 虛指標 虛表

2021-09-26 05:47:24 字數 1359 閱讀 2509

對於類的成員函式,如果在前面加上virtual,那麼這個成員函式就是虛函式,這個類就是帶有虛函式的類。

帶沒有虛函式的類,與不帶虛函式的類之間有什麼區別呢?帶有虛函式的模擬不帶虛函式的類會多乙個指標,這個指標就是虛指標,而虛指標指向乙個表,這個表就叫做虛表。虛表裡面存的內容就是虛函式的位址。

例子:

#include

using namespace std;

class

base

virtual void g()

virtual void h()

base()

:a(0

),b(

1)private

: int a;

int b;};

class

base_two

void g()

void h()

base_two()

:a(0

),b(

1)private

: int a;

int b;};

int main()

結果:

virtual function:16

virtual function:16

ordinary function:8

ordinary function:8

指標長度 = 8

從結果可以看出,帶虛函式的模擬不帶虛函式的類多出來了乙個指標的長度,我的指標長度是8,根據系統環境不同也有可能是4,從除錯結果也可以明顯看出來:

進一步用**驗證:
#include 

using namespace std;

class

base

virtual void g()

virtual void h()

base()

:a(0

),b(

1)private

: int a;

int b;};

int main()

結果:

object start address:0x70fe40

virtual function table start address:0x4863b0

function address in virtual function table:

0x41e420

0x41e460

0x41e4a0

0

虛函式,虛表,虛表指標

分享一篇文章,詳細解釋了為什麼通過基類指標指向基類物件或派生類物件,就可以呼叫相應類的虛函式。自 一 概述 為了實現c 的多型,c 使用了一種動態繫結的技術。這個技術的核心是虛函式表 下文簡稱虛表 本文介紹虛函式表是如何實現動態繫結的。二 類的虛表 每個包含了虛函式的類都包含乙個虛表。我們知道,當乙...

虛函式 虛指標和虛表

關於虛函式的背景知識 用virtual關鍵字申明的函式叫做虛函式,虛函式肯定是類的成員函式。存在虛函式的類都有乙個一維的虛函式表叫做虛表。類的物件有乙個指向虛表開始的虛指標。虛表是和類對應的,虛表指標是和物件對應的。多型性是乙個介面多種實現,是物件導向的核心。分為類的多型性和函式的多型性。多型用虛函...

虛函式 虛指標和虛表

關於虛函式的背景知識 用virtual關鍵字申明的函式叫做虛函式,虛函式肯定是類的成員函式。存在虛函式的類都有乙個一維的虛函式表叫做虛表。類的物件有乙個指向虛表開始的虛指標。虛表是和類對應的,虛表指標是和物件對應的。多型性是乙個介面多種實現,是物件導向的核心。分為類的多型性和函式的多型性。多型用虛函...