對於類的成員函式,如果在前面加上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:0x70fe40virtual function table start address:0x4863b0
function address in virtual function table:
0x41e420
0x41e460
0x41e4a0
0
虛函式,虛表,虛表指標
分享一篇文章,詳細解釋了為什麼通過基類指標指向基類物件或派生類物件,就可以呼叫相應類的虛函式。自 一 概述 為了實現c 的多型,c 使用了一種動態繫結的技術。這個技術的核心是虛函式表 下文簡稱虛表 本文介紹虛函式表是如何實現動態繫結的。二 類的虛表 每個包含了虛函式的類都包含乙個虛表。我們知道,當乙...
虛函式 虛指標和虛表
關於虛函式的背景知識 用virtual關鍵字申明的函式叫做虛函式,虛函式肯定是類的成員函式。存在虛函式的類都有乙個一維的虛函式表叫做虛表。類的物件有乙個指向虛表開始的虛指標。虛表是和類對應的,虛表指標是和物件對應的。多型性是乙個介面多種實現,是物件導向的核心。分為類的多型性和函式的多型性。多型用虛函...
虛函式 虛指標和虛表
關於虛函式的背景知識 用virtual關鍵字申明的函式叫做虛函式,虛函式肯定是類的成員函式。存在虛函式的類都有乙個一維的虛函式表叫做虛表。類的物件有乙個指向虛表開始的虛指標。虛表是和類對應的,虛表指標是和物件對應的。多型性是乙個介面多種實現,是物件導向的核心。分為類的多型性和函式的多型性。多型用虛函...