虛函式與多型性

2021-07-12 06:25:42 字數 678 閱讀 1055

1 概念

多型性是物件導向語言的乙個重要性質,虛函式是幫助c++實現多型性的技術。

多型性體現在可以

使用基類的指標呼叫派生類的同名函式。前提是基類的同名函式是virtual的。

2 例子

例如:class tool

~tool() {}

virtual use()

} class pen : public tool

~pen() {}

use()

} int myuse(tool& tool)

int main()

執行結果是「pen use」,在myuse中呼叫的是pen的use(),符合人們的目的;

如果基類tool的use()不是virtual,則執行結果是「tool use」,就是說myuse()中的tool.use()只會呼叫tool類的use()。

3 使用vtable

編譯器是怎麼知道呼叫pen的use()? 這是編譯器做的工作,編譯器在每個包含虛函式的類中

建立了虛函式表vtable,並且分配了指向這個vtable的指標vptr。

編譯器通過查詢vtable,

得到要執行函式的位址(vptr+n),進而執行函式。

這是在執行期間確定函式位址,叫做晚繫結,與之相反的在編譯期間就已確定函式位址,則稱作早繫結。

虛函式與多型性

實驗內容 定義基類base,其資料成員為高h,定義成員函式disp 為虛函式,由基類派生出長方體類和圓柱類,並在兩個派生類中定義成員函式disp 為虛函式。在主函式中,用基類base定義指標p,用指標p動態呼叫虛函式disp 顯示面積。虛函式 它是基類中的成員函式,並在派生類中被過載。派生類中的虛函...

多型性與虛函式

1.函式過載 overloading 與靜態聯編 static binding 函式過載 overloading 指的是,允許多個不同函式使用同乙個函式名,但要求這些同名函式具有不同的參數列。參數列中的引數個數不同 參數列中對應的引數型別不同 參數列中不同型別引數的次序不同。例 intabs int...

虛函式與多型性

include stdafx.h include using namespace std class animal void sleep void breathe class fish public animal void fn animal pan int tmain int argc,tchar...