思考類的布局,以前一直以為 乙個類可能有多個虛表。
今天下午特別的寫程式測試下。
結論是:無論乙個類怎麼繼承來的,他的虛表只有乙個!//
感覺:注意:虛表的理解,至少2個層次,動靜結合
靜,要知道 類的布局
動,要知道函式 動態繫結
#include
"stdafx.h"
#include
using
namespace
std;
class
base
public
:virtual
void
f()
virtual
void
g()
void
h()
};class
derived:public
base //
使用父親的
virtual
void
g()
void
h()
virtual
void
i()
};void
test_main()
//除錯方法:就是呼叫
test_main()
後面試我的測試截圖:
補上虛表轉換圖示:
虛指標 虛表及記憶體布局
首先要清楚,所謂指標其實質就是乙個記憶體位址值,形如0x12345678 其次,要知道,函式名本身就是乙個位址 虛指標 其實就是乙個位址值,以該位址為起始位址的一片記憶體單元存放著各虛函式的入口位址,這一片記憶體單元合起來就稱為虛函式表 想象一下 一片記憶體單元存著許多函式位址,想執行哪個虛函式就來...
虛函式,虛表,虛表指標
分享一篇文章,詳細解釋了為什麼通過基類指標指向基類物件或派生類物件,就可以呼叫相應類的虛函式。自 一 概述 為了實現c 的多型,c 使用了一種動態繫結的技術。這個技術的核心是虛函式表 下文簡稱虛表 本文介紹虛函式表是如何實現動態繫結的。二 類的虛表 每個包含了虛函式的類都包含乙個虛表。我們知道,當乙...
虛表指標和虛表
父類中有虛函式,父類繼承子類後 1 有各自的虛表指標和虛表 2 對於子類中未被重寫的虛函式,在父子類各自虛表中儲存的函式位址都是父類中的虛函式位址 3 對於子類中被重寫的虛函式,在父子類各自的虛表中儲存的函式位址是不同的 exp1 無覆蓋時 include using namespace std c...