C 虛指標 虛表

2021-09-25 20:54:11 字數 2254 閱讀 7974

可分為靜態多型和動態多型

過載比較簡單這裡就不說,今天我們主要來談一談虛函式

如何驗證vptr指標存在?

先看如下**,父親類中沒有宣告虛函式,只有乙個int成員,而子類中宣告虛函式,並且擁有乙個int成員

#include using namespace std;

class father

;class child

;int main()

執行結果如下

子類中宣告了虛函式,系統自動生成了乙個vptr指標,其大小4位元組;因此子類總大小為8位元組。

虛表的解釋之前看到一篇文章解釋的比較清楚,文章會圍繞四鐘情況來進行解釋,下面來自該文章的解釋

1、在單繼承沒有覆蓋的情況下,子類的虛表會緊跟父類的虛表(虛函式按照宣告順序放於表中)。

2、在單繼承有覆蓋的情況下,覆蓋的子類會替代原先父類虛表的位置,其餘的子類虛表會緊跟父類

3、在多繼承沒有覆蓋的情況下,子類的虛表會緊跟第乙個父類的虛表,其他的父類虛表中不會出現子類的虛表

4、在多繼承有覆蓋的情況下,覆蓋的子類會替代所有父類同名虛函式在虛表中的位置,其餘的子類虛表會緊跟第乙個父類的虛表

#includeusing namespace std;

class base

virtual void g()

{} virtual void h()

{}};

class base1

virtual void g()

{} virtual void h()

{}};

class base2

virtual void g()

{} virtual void h()

{}};

class derive : public base, public base1, public base2

virtual void g1()

{} virtual void h1()

{}};

void main()

虛表 虛指標

虛函式在c 中的實現機制就是用虛表和虛指標,但是具體是怎樣的呢?從more effecive c 其中一篇文章裡面可以知道 是每個類用了乙個虛表,每個類的物件用了乙個虛指標。具體的用法如下 cpp view plain copy class a class b public a a,b的實現省略 因...

虛函式,虛表,虛表指標

分享一篇文章,詳細解釋了為什麼通過基類指標指向基類物件或派生類物件,就可以呼叫相應類的虛函式。自 一 概述 為了實現c 的多型,c 使用了一種動態繫結的技術。這個技術的核心是虛函式表 下文簡稱虛表 本文介紹虛函式表是如何實現動態繫結的。二 類的虛表 每個包含了虛函式的類都包含乙個虛表。我們知道,當乙...

虛繼承 虛表 虛指標

c 實現多型的方法 其實很多人都知道,虛函式在c 中的實現機制就是用虛表和虛指標,但是具體是怎樣的呢?從more effecive c 其中一篇文章裡面可以知道 是每個類用了乙個虛表,每個類的物件用了乙個虛指標。具體的用法如下 class a class b public a a,b的實現省略 因為...