有關鍵字virtual修飾的成員函式,為了實現多型。
1.虛函式表用來存放虛函式的位址,也稱虛表。
2.乙個含有虛函式的類中至少有乙個虛表。
3.虛表指標:二級指標,虛函式指標的指標,存放在物件模型頭部,32位系統中佔4個位元組,在64位系統中佔8個位元組。虛表指標中存放著虛表的首位址。可以通過物件例項化的位址得到虛函式表的位址。
4.虛表與虛表指標的關係如下:
//列印虛函式表
單繼承時,子類中只有乙個虛函式表,父類虛函式在前,子類虛函式在後,按照宣告順序存放。
子類中有乙個虛函式表,覆蓋的虛函式放在虛函式表中繼承於父類的位置,新增的虛函式放在繼承的父類虛表的後面。
多繼承時,子類中虛表個數等於直接父類的個數,子類中新增的虛函式放在第乙個直接父類的虛表末尾,按照宣告順序存放。
多繼承有虛函式重寫時,子類中虛表個數等於直接父類的個數,子類中重寫的虛函式覆蓋繼承的父類的虛函式,子類中新增的虛函式放在第乙個直接父類的虛表末尾,按照宣告順序存放。
虛函式及虛函式表
虛函式及虛函式表 首先,我們要分清三大概念 過載 重寫 覆蓋 和重定義 一.函式過載 1 在相同的作用域內 無繼承關係,只在乙個類內進行宣告 2 進行多個函式宣告 3 多個函式的函式名相同,引數列表不同 可以是型別不同 引數型別不同 傳參順序不同 4 函式的返回值型別可以相同,可以不同。不能僅依靠函...
C 虛函式及虛函式表詳解
多型 的關鍵在於通過基類指標或引用呼叫乙個虛函式時,編譯時不確定到底呼叫的是基類還是派生類的函式,執行時才確定。include using namespace std class a virtual void func2 class b public a int main 在 32 位編譯模式下,程...
虛函式表指標,虛函式表
對c 了解的人都應該知道虛函式 virtual function 是通過一張虛函式表 virtual table 來實現的。簡稱為v table。在這個表中,主是要乙個類的虛函式的位址表,這張表解決了繼承 覆蓋的問題,保證其容真實反應實際的函式。這樣,在有虛函式的類的例項中這個表被分配在了 這個例項...