1.多態(tài)定義
在擁有繼承關(guān)系的不同類中調(diào)用同一函數(shù),產(chǎn)生不同結(jié)果稱為多態(tài)
多態(tài)條件:
調(diào)用函數(shù)為虛函數(shù)且經(jīng)過重寫藕咏,使用指針或引用進行函數(shù)調(diào)用
2.多態(tài)實現(xiàn)流程
首先,在擁有虛函數(shù)的類在進行文件編譯過程中饥悴,會生成該類的vtable,保存了當前類所有虛函數(shù)指針(vptr)西设,其后子類繼承時也會單獨生成并繼承vtable答朋。
在使用指針或引用進行虛函數(shù)調(diào)用時,首先會確定當前指針指向?qū)ο蟮木唧w類型梦碗,然后查詢當前類vtable中對應(yīng)的vptr并轉(zhuǎn)向?qū)?yīng)函數(shù)進行操作
3.構(gòu)造/析構(gòu)函數(shù)中調(diào)用虛函數(shù)
構(gòu)造函數(shù)中調(diào)用虛函數(shù):子類進行構(gòu)造的時候首先會以此從基類向派生類進行構(gòu)造,基類構(gòu)造函數(shù)運行時派生類空間尚未生成洪规,此時對象類型可以視為基類類型,此時進行函數(shù)綁定時會將該函數(shù)和基類函數(shù)綁定雄人;在后續(xù)類中運行構(gòu)造函數(shù)時同理,會綁定距離該類最近的父類函數(shù)础钠。
析構(gòu)函數(shù)中調(diào)用虛函數(shù):析構(gòu)函數(shù)的調(diào)用順序是從派生類到基類,在運行某一類的析構(gòu)函數(shù)時珍坊,其子類的析構(gòu)函數(shù)已經(jīng)運行,子類空間已經(jīng)消失阵漏,因此綁定的虛函數(shù)為距當前析構(gòu)函數(shù)對應(yīng)類的最近的父類函數(shù)。