虛函式與多型性

2021-07-04 07:10:35 字數 1267 閱讀 9530

#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* argv)

輸出結果:animal breathe

物件的位址。當在fn函式中執行pan->breathe()時,呼叫的當然就是animal物件的breathe的函式。

下圖為fish物件記憶體模型:

當我們構造fish類的物件時,首先要呼叫animal類的建構函式去構造animal類的物件,然後才呼叫fish類的建構函式完成

自身部分的構造,從而拼接出乙個完整的fish物件。當我們將fish類的物件轉換為animal型別時,該物件就被認為是原對

象整個記憶體模型的上半部分。即「animal的物件所佔記憶體」。當我們利用型別轉換後的物件指標去呼叫它的方法時,自然

也就是呼叫它所在的記憶體中的方法。

現在我們在animal類的breathe()方法上加上virtual關鍵字。

#include "stdafx.h"

#include using namespace std;

class animal

void sleep()

virtual void breathe()//新增virtual關鍵字,成為此函式為虛函式

};class fish :public animal

}; void fn(animal *pan)

int _tmain(int argc, _tchar* argv)

輸出結果:

fish bubble

分析:這就是c++的多型性。在c++編譯器在編譯的時候,發現animal類的breathe()函式是虛函式,此時c++就會採用

遲繫結技術。也就是編譯時並不確定具體呼叫的函式,而是在執行時,根據物件的型別類確認呼叫是哪乙個函式,這種

能力就叫做c++的多型性。

c++的多型性的概括:在基類的函式上加上virtual關鍵字,在派生類中重寫該函式,執行時將會根據物件的實際型別

來呼叫相應的函式。

虛函式與多型性

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

多型性與虛函式

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

虛函式與多型性

1 概念 多型性是物件導向語言的乙個重要性質,虛函式是幫助c 實現多型性的技術。多型性體現在可以 使用基類的指標呼叫派生類的同名函式。前提是基類的同名函式是virtual的。2 例子 例如 class tool tool virtual use class pen public tool pen u...