C 的虛函式

2021-08-17 04:17:49 字數 943 閱讀 1898

定義虛函式後,虛表位址存放於類的前4個位元組,故無論多少個虛函式,只占用類的4個位元組,虛表中則存放多個虛函式,類似於陣列一樣排列。

虛函式與多型

在編譯器編譯後,成員變數以及普通成員將會分配固定位址,稱為前期繫結;

而虛函式則不是,它需要程式執行時,動態分配位址,稱為動態繫結。

如果想通過父類指標訪問子類的方法,那麼便是多型,通過多重繼承虛函式,其各類的虛函式儲存在子類的虛表中

一些見解:

1.使用父類指標訪問子類時,只能訪問子類中繼承父類的成員

2.如果子類的成員函式與父類相同,那麼子類的函式將會覆蓋繼承的父類函式

3.通過繼承的相同的虛函式,可以通過父類指標訪問,而這些相同的虛函式則儲存於虛表當中,通過一定的順序呼叫繼承過來的虛函式。

4.通過普通指標訪問類時,則通過指標移位進行訪問變數,如果類中有虛函式,那麼指標的第乙個指向為虛函式的虛表位址,指標的下乙個才是變數值

5.子類的成員變數可以通過父類指標訪問,但只能訪問父類擁有的成員

6.子類的成員變數可以通過普通的指標訪問,通過指標的遞增訪問所有變數

7.子類的成員函式能通過父類指標訪問,但僅限於虛函式,通過虛表

8.子類的成員函式可以通過定義函式指標進行訪問

C 虛函式 純虛函式

1 基本概念 虛函式是在基類中使用關鍵字virtual宣告的函式。在派生類中重新定義基類中定義的虛函式時,會告訴編譯器不要靜態鏈結到該函式。我們想要的是在程式中任意點可以根據所呼叫的物件型別來選擇呼叫的函式,這種操作被稱為動態鏈結,或後期繫結。您可能想要在基類中定義虛函式,以便在派生類中重新定義該函...

C 虛函式 純虛函式

1.析構函式是否應為虛函式問題?2.成員函式的虛函式問題?3.析構函式是否可以為純虛函式問題?說明 僅在使用父類指標指向子類物件時有區別 當析構函式非虛函式時,使用父類指標指向子類物件,在析構時將不會呼叫子類析構函式 當析構函式是虛函式時,使用分類指標指向子類物件,在析構時會呼叫子類析構函式,且呼叫...

C 虛函式 純虛函式

include qdebug class animal void animal animal 即要實現基類animal的animal函式 假如在dog子類中沒有實現animal 函式,則會呼叫基類的animal 函式。即列印 what is the animal 假如在dog子類中實現了animal...