c 多型原理

2021-07-04 22:42:41 字數 1006 閱讀 4406

1 當類中宣告虛函式時,編譯器會在類中生成乙個虛函式表

2 虛函式表是乙個儲存類成員函式指標的資料結構

3 虛函式表是由編譯器自動生成與維護的

4 virtual成員函式會被編譯器放入虛函式表中

5 當存在虛函式時,每個物件中都有乙個指向虛函式表的指標(c++編譯器給父類物件、子類物件提前布局vptr指標;當進行howtoprint(parent *base)函式是,c++編譯器不需要區分子類物件或者父類物件,只需要再base指標中,找vptr指標即可。)

6 vptr一般作為類物件的第乙個成員

c++中多型的實現原理

當類中宣告虛函式時,編譯器會在類中生成乙個虛函式表

虛函式表是乙個儲存類成員函式指標的資料結構

虛函式表是由編譯器自動生成與維護的

virtual成員函式會被編譯器放入虛函式表中

存在虛函式時,每個物件中都有乙個指向虛函式表的指標(vptr指標)

1 通過虛函式表指標vptr呼叫重寫函式是在程式執行時進行的,因此需要通過定址操作才能確定真正應該呼叫的函式。而普通成員函式是在編譯時就確定了呼叫的函式。在效率上,虛函式的效率要低很多。

2 出於效率考慮,沒有必要將所有成員函式都宣告為虛函式。

3 c++編譯器,執行howtoprint函式,不需要區分是子類物件還是父類物件。

證明vptr指標的存在

#include 

using

namespace

std;

class a

;class b

;void main()

C 多型原理

靜態多型性比較簡單,主要動態多型性比較難理解。動態多型性有兩個條件 1 在基類中必須使用虛函式 純虛函式 2 呼叫函式時要使用基類的指標或引用。只要在基類的成員函式前加上virtual,該成員函式就是虛函式,從基類派生出來的類的同名成員函式,不管前面是否有virtual,同樣是虛函式,在虛函式的實現...

C 多型實現原理

用virtual關鍵字申明的函式叫做虛函式,虛函式肯定是類的成員函式。存在虛函式的類都有乙個一維的虛函式表叫做虛表。類的物件有乙個指向虛表開始的虛指標。虛表是和類對應的,虛表指標是和物件對應的。多型性是乙個介面多種實現,是物件導向的核心。分為類的多型性和函式的多型性。多型用虛函式來實現,結合動態繫結...

C 多型的原理

這裡常考一道筆試題 sizeof base 是多少?這裡 sizeof base 8。int型別4個位元組 virtual中含乙個指標 4個位元組 8個位元組 無論有幾個虛函式,只有乙個指標,指標指向虛函式表 class base private int b 1 通過觀察測試我們發現b物件是8byt...