多態(tài)可以分為靜態(tài)多態(tài)和動態(tài)多態(tài)
靜態(tài)多態(tài):函數(shù)重載,泛型編程,編譯器在編譯期間內(nèi)完成的,編譯器根據(jù)函數(shù)實(shí)參的類型可推斷出調(diào)用哪個函數(shù)
動態(tài)多態(tài):虛函數(shù)實(shí)現(xiàn)并給于類繼承來表現(xiàn)
動態(tài)多態(tài)的機(jī)制:
1.子類繼承父類
2.類實(shí)現(xiàn)接口
動態(tài)綁定的條件:
1.必須是虛函數(shù)
2.通過基類類型的引用或者指針調(diào)用
總結(jié):
1.派生類重寫基類的虛函數(shù)實(shí)現(xiàn)多態(tài),要求函數(shù)名、參數(shù)列表、返回值完全相同
2.基類中定義了虛函數(shù),在派生類中該函數(shù)始終保持虛函數(shù)的特性
3.只有類的成員函數(shù)才能定義虛函數(shù),靜態(tài)成員函數(shù)不能定義虛函數(shù)
4.如果在類外定義虛函數(shù),只能在聲明函數(shù)時加上virtual關(guān)鍵字,定義時不用加
5.構(gòu)造函數(shù)不能定義為虛函數(shù),
6.不要在構(gòu)造函數(shù)和析構(gòu)函數(shù)中調(diào)用虛函數(shù),在構(gòu)造函數(shù)和析構(gòu)函數(shù)中,對象是不完整的,可能會出現(xiàn)未定義的行為
7.最好將基類的析構(gòu)函數(shù)聲明為虛函數(shù)。
8.虛表是所有類對象實(shí)例共用的
易混淆的知識點(diǎn)