#include "iostream"
using namespace::std;
class b0
int main()
輸出:
b1::display()
d1::display()
示例3:
#include using namespace std;
class b0 //基類b0宣告
void main() //主函式
輸出:
b0::display()
b1::display()
d1::display()
從兩個示例可以看出,雖然fun()的實參傳遞不同的引數,但還是根據自己的傳遞來進行傳值。不要在乎剛開始宣告fun()時所傳遞的函式為何值(基類還是派生類),這裡都表示是乙個基類引用。(我的理解fun()無論傳遞的基類還是派生類,都保留基類)
這其中涉及到乙個規則:用基類的指標指向不同的派生類的物件時,基類指標呼叫其虛成員函式,則會呼叫其真正指向物件的成員函式,而不是基類中定義的成員函式(只要派生類改寫了該成員函式)。若不是虛函式,則不管基類指標指向的哪個派生類物件,呼叫時都
會呼叫基類中定義的那個函式。
基於規則的例子:
#i nclude using namecpace std;
class b0 //基類b0宣告
void main() //主函式
執行結果:
b0::display()
b0::display()
b0::display()
虛函式是動態繫結的基礎。
是非靜態的成員函式。
在類的宣告中,在函式原型之前寫virtual。
virtual只用來說明類宣告中的原型,不能用在函式實現時。
具有繼承性,基類中宣告了虛函式,派生類中無論是否說明,同原型函式都自動為虛函式。
本質:不是過載宣告而是覆蓋。
呼叫方式:通過基類指標或引用,執行時會根據指標指向的物件的類,決定呼叫哪個函式。(參考最後乙個例子)
參考:
物件導向的多型 多型性
多型指的是一類事物有多種形態,比如水有多種形態 冰 水 水蒸氣,但都是h2o,下面定義乙個h2o的父類和三種形態的子類 class h2o def init self,name,temperature self.name name self.temperature temperature deftu...
物件導向之多型 多型性
一 多型 多型指的是一類事物有多種形態 動物有多種形態 人,狗,豬 import abcclass animal metaclass abc.abcmeta 同一類事物 動物 abc.abstractmethod deftalk self pass class people animal 動物的形態...
物件導向之 多型與多型性
1.什麼是多型?多型指的是同一種事物的多種形態。水 冰,水蒸氣,液態水 2.為何要用多型?多型性 繼承同乙個類的多個子類中有相同的方法名 那麼子類產生的物件就可以不用考慮具體的型別而直接呼叫功能 3,如何用?例如 import abc class animal metaclass abc.abcme...