C 中的虛函式表指標 dog,cat

2021-09-29 10:04:31 字數 812 閱讀 2950

請按任意鍵繼續…

如果沒有main()裡的那組交換**,即///包含的部分,輸出結果是正常的,

dog:wang wang wang

cat:miao miao miao ,加上交換,就變了。

因為,交換的是類物件的前四個位元組,而前四個位元組存放的是vfptr(虛函式表指標),於是呼叫dog的bark()查詢的是cat的虛函式表,於是呼叫的是cat的bark(); 呼叫cat的bark是,查詢的是dog 虛函式表,於是就呼叫了dog的bark於是結果:

dog:miao miao miao

cat:wang wang wang

虛函式表指標,虛函式表

對c 了解的人都應該知道虛函式 virtual function 是通過一張虛函式表 virtual table 來實現的。簡稱為v table。在這個表中,主是要乙個類的虛函式的位址表,這張表解決了繼承 覆蓋的問題,保證其容真實反應實際的函式。這樣,在有虛函式的類的例項中這個表被分配在了 這個例項...

C 虛函式指標虛函式表

c 的多型可以分為靜態多型和動態多型。函式過載和運算子過載實現的多型屬於靜態多型,而通過虛函式可以實現動態多型。實現函式的動態聯編其本質核心則是虛表指標與虛函式表。1.虛函式與純虛函式區別 1 虛函式在子類裡面也可以不過載的 但純虛必須在子類去實現 2 帶純虛函式的類叫虛基類也叫抽象類,這種基類不能...

C 虛函式指標虛函式表

c 的多型可以分為靜態多型和動態多型。函式過載和運算子過載實現的多型屬於靜態多型,而通過虛函式可以實現動態多型。實現函式的動態聯編其本質核心則是虛表指標與虛函式表。1.虛函式與純虛函式區別 1 虛函式在子類裡面也可以不過載的 但純虛必須在子類去實現 2 帶純虛函式的類叫虛基類也叫抽象類,這種基類不能...