C 虛函式指標與虛函式表

2021-10-08 17:13:31 字數 807 閱讀 5540

當父類中某個方法有virtual關鍵字修飾,則該方法被放入虛函式表中,同時,有乙個指標指向該父類的虛函式表。

當子類繼承父類後,子類會繼承父類的虛函式指標和虛函式表,(在子類構造函式呼叫時)會將自己的虛函式指標指向自己的虛函式表,但是如果子類重寫了該方法(加virtual或者不加都可以,但是方法必須完全相同包括返回值),那麼子類的虛函式表中的函式則會改變。

父類指標指向子類物件時,發生動態聯編,如果虛函式表被重寫,則呼叫父類虛函式會指向被重寫的方法,否則父類指標指向自身的方法,是靜態聯編。

當父類指標(子類指標)指向子類物件(父類物件時)

沒有指定虛函式,  那麼它就只能訪問到型別對應的函式

基類指標就只能訪問到基類函式

子類指標就只能訪問到子類函式

如果基礎類和衍生類定義了相同名稱的成員函式,那麼通過物件指標呼叫成員函式時,到底呼叫那個函式要根據指標的原型來確定,而不是根據指標實際指向的物件型別確定

如果指標原型中某個成員函式被重寫,則呼叫時會指向該被重寫的函式。如果沒有被重寫,則指向該指標原型本身的成員函式。

輸出:

重點在於:父類指標指向子類物件,用該指標呼叫方法時是根據父類指標來判斷的。深層原理:1.多型,產生動態聯編,如果虛函式被重寫,那麼子類的虛函式指標發生改變 2.靜態聯編的方法不會改變

虛函式表指標,虛函式表

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

C 虛函式指標虛函式表

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

C 虛函式指標虛函式表

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