虛指標和虛表

2021-10-08 19:58:05 字數 1199 閱讀 1893

所以當用sizeof來獲取含有虛函式的類的大小的時候,

會發現結果 比 裡面還有的資料 大4個位元組。

這四個位元組就是(虛)指標。(32位系統)

子類裡面有父類的成員變數。

當然,父類有虛函式,自然 子類 就有虛函式。

虛表裡放的都是虛函式的指標,指向虛函式的位址

子類即使沒有重寫 父類的 虛函式, 子類的虛表裡 也有虛函式,只不過是父類的虛函式

如上圖中,b類沒有重寫 a類的 虛函式 vfun2(),那麼b的虛表裡的虛函式的指標就是和a類的那個虛函式指標相同的。

呼叫虛函式,走的路線是:通過的虛指標找到虛函式表,從虛函式表裡查詢對應的虛函式

是類例項的虛指標?還是類的虛指標。

根據成員函式傳遞this指標,所以 乙個類的虛指標應該是一致的,即所有類例項都是同乙個虛函式指標。

這就比所謂的通過儲存函式指標的方式,更節省記憶體。

p即this指標。

乙個ui需要畫圖,mylst這個列表的放的各種不同形狀的元素的指標。

當然這些類可能是circle,rectangle,他們 都繼承自 基類shape。

然後通過虛函式draw()來繪製 圖形。

draw接受乙個基類指標,這裡就是乙個多型 的應用。

把子類指標 賦給 父類指標, 父類指標就通過虛函式的機制,呼叫相同的名字的重寫後的虛函式,實現各自本身的繪製。

這裡應用是在於,用乙個容器來儲存,因為容器要求元素型別相同,所以不能用不同型別的指標,所以都用父類的指標。由於要呼叫相同的函式名而實現各自實現的繪製,這裡就是乙個虛函式的應用。

(指標向上轉型,呼叫子類虛函式)

有點秒。實現這樣的效果。

虛機制實現的動態繫結

相對的,靜態繫結一定是呼叫的某個確定的位址,沒得商量。

虛表指標和虛表

父類中有虛函式,父類繼承子類後 1 有各自的虛表指標和虛表 2 對於子類中未被重寫的虛函式,在父子類各自虛表中儲存的函式位址都是父類中的虛函式位址 3 對於子類中被重寫的虛函式,在父子類各自的虛表中儲存的函式位址是不同的 exp1 無覆蓋時 include using namespace std c...

虛函式 虛指標和虛表

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

虛函式 虛指標和虛表

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