以下為個人的一些理解,如有不對,敬請大家斧正。
class basevirtual void fun() };
class derive: base
virtual void act()
};
虛表是c++用於實現多型的一種方式,每個擁有虛函式的類編譯器都會為之分配一張虛表,指向虛表的指標即為虛指標,例如以上兩個類base和device,分別就有一張虛表,包含有兩個函式fun()和act()。
int main()
由以上例子看出,虛指標儲存在物件空間中,由虛指標可以找到虛表,在由虛函式的排列順序就可以找到每個函式的位址,我當前為高位先存,所以fun()位址比act()大,並且由於記憶體邏輯上是連續分配的,所以ptr++就可以得到子類物件的位址。
執行結果大家可以到文章用圖里找。
參考:
關於虛表和虛表指標
1 動態多型 動態繫結 在程式執行期間 非編譯期間 判斷所引用物件的實際型別,根據其實際型別呼叫相應的方法。2 動態多型具體實現 class a virtual void funtest2 int a class b1 public a virtual void funtest3 int b1 vo...
C 虛指標 虛表
可分為靜態多型和動態多型 過載比較簡單這裡就不說,今天我們主要來談一談虛函式 如何驗證vptr指標存在?先看如下 父親類中沒有宣告虛函式,只有乙個int成員,而子類中宣告虛函式,並且擁有乙個int成員 include using namespace std class father class ch...
虛指標和虛表
所以當用sizeof來獲取含有虛函式的類的大小的時候,會發現結果 比 裡面還有的資料 大4個位元組。這四個位元組就是 虛 指標。32位系統 子類裡面有父類的成員變數。當然,父類有虛函式,自然 子類 就有虛函式。虛表裡放的都是虛函式的指標,指向虛函式的位址。子類即使沒有重寫 父類的 虛函式,子類的虛表...