c 虛函式與虛函式表原理

2022-09-21 08:33:09 字數 1106 閱讀 8455

目錄

用virtual修飾的成員函式叫虛函式

小知識:沒有虛建構函式 不寫虛函式,沒有預設的虛函式

普通函式不影響類的記憶體:

class mm

protected:

};void testvirtual()

int main()

/*輸出*/

/* 1 */

增加乙個指標的記憶體,32位作業系統多4個位元組 ,64位作業系統多8個位元組

#include

using namespace std;

class mm

/*virtual void print2()

無論多少個虛函式,增加的位元組就是乙個指標的位元組--->多了乙個虛函式,還是4個位元組*/

protected:

};void testvirtual()

int main()

/*輸出*/

/* 4 */

小知識:一旦有了資料,標識位就不需要存在了

class a

;class b

;void testvirtual()

int main()

/*輸出*/

/*4 1*/

就是乙個指標儲存所有虛函式的首位址(虛函式函式名)函式指標

只有指標可以操作一段記憶體(4位元組)

/*無論多少個虛函式,增加的位元組就是乙個指標的位元組*/

所有的虛函式其實是 用乙個函式指標去儲存的 ,把 這個函式指標指向的這一段記憶體 稱為虛函式表

#include

using namespace st

class mm

virtual void print2()

protected:

};void testvirtual()

int main()

/*輸出*/

/*虛函式1

虛函式2*/

虛函式可以在類中宣告,在類外實現,不再需要virtual修飾詞,只要類名限定就可以了

class mm

;void mm::print3()

int main()

/*輸出*/

/*虛函式3*/

C 虛函式與虛函式表

概念 虛函式 virtual function 是通過一張虛函式表 virtual table 來實現的,簡稱為v table。學習虛函式的作用 理解 c 實現多型的機制 解決了繼承 覆蓋的問題。以下摘抄自 http www.cppblog.com xczhang archive 2008 01 2...

C 虛函式與虛函式表

多型性可分為兩類 靜態多型和動態多型。函式過載和運算子過載實現的多型屬於靜態多型,動態多型性是通過虛函式實現的。每個含有虛函式的類有一張虛函式表 vtbl 表中每一項是乙個虛函式的位址,也就是說,虛函式表的每一項是乙個虛函式的指標。沒有虛函式的c 類,是不會有虛函式表的。兩張圖 簡單例子 1 inc...

C 虛函式與虛函式表

1 多型是c 三大特性之一,也是物件導向設計中乙個非常重要的概念。所謂多型性就是當 不同的物件接收到相同的訊息時所產生的不同的響應。c 中虛函式的存在其實就是為了解決物件導向程式設計設計當中的多型問題,即通過基類的指標 或者是引用 指向例項化 的派生類物件,從而通過基類的指標 或者是引用 呼叫派生類...