#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...