C 單個類的所有物件是否共享虛函式表的驗證

2021-08-08 10:23:05 字數 923 閱讀 5009

驗證**如下:

#include 

using namespace std;

typedef long long ll;

class

a virtual void f()

virtual void g()

virtual ~a

() };

typedef void(*func)

();int main()

輸出結果:

vs2017 x64平台

ubuntu1604 64位(g++5.4.0)

輸出f和g的位址以及對f和g進行呼叫是為了驗證程式的正確性。無論是vs還是g++,兩個物件的虛函式表位址都是一樣的,說明兩個物件共享虛函式表。

既然單一虛函式錶類的物件都共享虛函式表,那麼無論繼承類的物件有多少個虛函式表,這些虛函式表應該都是共享的。下面驗證:

#include 

using namespace std;

typedef long long ll;

class

a virtual void ga()

};class

b virtual void gb()

};class

c: public a, public b

;typedef void(*func)

();int main()

輸出如下:

vs2017 x64平台

ubuntu1604 64位(g++5.4.0)

可以看出,c1和c2的兩個虛函式表位址仍然是一樣的。

結論:如果乙個類有虛函式,那麼這個類的所有物件共享乙個虛函式表。

C 判等物件是否相等的方法彙總

一 判斷相等的3個方法 1.例項方法 public virtual bool equals object obj 2.比較值型別靜態方法 public static bool equals object obja,object objb 3.比較引用型別靜態方法 pub static bool re...

C 虛函式 物件 類對應的位址

在c 中的多型中,我們通過位址的訪問來尋找虛函式 物件 類的位址。具體看 實現 include stdafx.h include using namespace std class a virtual void f int i class b public a virtual void f int ...

C 函式中返回的物件是否進行優化執行結果

include using namespace std struct foo foo const foo void operator const foo foo gcc 缺省會進行rov優化,不會呼叫拷貝建構函式,直接把棧內的f物件提公升級呼叫函式可用物件,避免呼叫拷貝建構函式及銷毀棧內的f物件的效...