多型指不同的物件傳送同乙個訊息,不同物件對應同一訊息產生不同行為。多型存在於具有繼承關係的類中,當父類函式被申明為虛函式,子類重寫了父類虛函式時,就具備了多型發生的條件。
123
4567
891011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
4041
4243
4445
4647
/* c++學習筆記:物件導向,多型*/
#include class animal
};class dog: public animal
};class cat: public animal
};void animalbark(animal *animal)
int main()
1
23
動物叫...
動物叫...
動物叫...
父類函式新增virtual
,將其宣告為虛函式。
123
4567
8
class animal
};
1
23
動物叫...
wang wang wang ...
miao miao miao ...
基類中的虛函式是乙個使用關鍵字virtual宣告的函式。派生類中已經對函式進行定義的情況下,定義乙個基類的虛函式,就是要告訴編譯器我們不想對這個函式進行靜態鏈結。
我們所希望的是根據呼叫函式的物件的型別對程式中在任何給定指標中被呼叫的函式的選擇。這種操作被稱為動態鏈結,或者後期繫結。
多型的三個條件
類間存在繼承
要有虛函式重寫
父類指標或引用指向子類物件
過載:同乙個類中函式名相同,引數列表相同。以下**表示 bark() 函式的過載。
123
4567
891011
1213
1415
16
class animal
virtual void bark(std::string name)
};
重寫:指子類覆蓋父類的虛函式,要求函式名和引數均相同,如下所示:
123
4567
891011
1213
1415
1617
class animal
};class dog: public animal
};
C 學習筆記 多型
引言 1.虛繼承 如果乙個派生類從多個基類派生,而這些基類又有乙個共同的基類,則在對該基類中宣告的名字進行訪問時,可能產生二義性。解決方案 虛繼承宣告,加乙個virtual 關鍵字 2.物件導向新需求 編譯器的做法不是我們期望的 如果用父類指標指向子類物件,再呼叫print 方法,均會呼叫父類中的p...
C 多型學習筆記
看了一堆介紹多型的東西,腦子裡就記得幾個概念了。靜態多型,又叫早繫結,動態多型,應該是叫晚繫結。多型的價值在於使程式更簡潔 更高效。no virtual no 多型,virtual means 已多型。不要覺得問題 很沒用 你還就是說不出來。同樣的命令,不同的物件,做出不同的動作。這就得借助the ...
c 學習筆記 多型
這裡用乙個shape類 rectangle類 cirle類進行說明 virtual shape 虛析構函式 在動態申請空間時候 防止沒析構派生類 virtual double area 虛函式有藏的效果 virtual double zhouchang private double area dou...