多态是c++面向對象三大特性之一
多态的優點:
代碼組織結構清晰
可讀性強
利于前期以及後期的擴充以及維護
多态分為兩類:
靜态多态:函數重載和運算符重載屬于靜态多态,複用函數名
動态多态:派生類和虛函數實作運作時多态
靜态多态和動态多态的差別:
靜态多态的函數位址早綁定 - 編譯階段确定函數位址
動态多态的函數位址晚綁定 - 運作階段确定函數位址
動态多态後的animal類:
動态多态後的cat類:
tips:怎麼檢視底層類結構的方法在上篇部落格有寫
1、普通寫法
缺點:如果想擴充新的功能,需要修改源碼
在真實開發中,提倡“開閉原則”,即:對擴充進行開放,對修改進行關閉
2、利用多态
在多态中,通常父類虛函數的實作是毫無意義的,主要都是調用子類重寫的内容,是以可以将虛函數改為純虛函數
純虛函數文法: virtual 傳回值類型 函數名 (參數清單)= 0;
當類中有了純虛函數,這個類也被稱為抽象類
抽象類特點:
-無法執行個體化對象
-子類必須重寫抽象類中的純虛函數,否則也屬于抽象類
制作飲品的大緻流程:煮水-沖泡-倒入杯中-加入輔料
在多态中,如果子類有屬性開辟到堆區,那麼父類指針在釋放時無法調用到子類的析構代碼
解決方法:将父類中的析構函數改成虛函數或者純虛函數
虛析構和純虛析構的共性:
-可以解決父類指針釋放子類對象
-都需要有具體的函數實作
虛析構和純虛析構的差別:
-如果是純虛析構,該類屬于抽象類,無法執行個體化對象
虛析構文法:virtual ~類名(){}
純虛析構文法: virtual ~類名() = 0;
如果子類對象沒有堆區資料,可以不寫為虛析構或者純虛析構
電腦主要組成部件為cpu(用于計算)、顯示卡(用于顯示)、記憶體條(用于存儲)
将每個零件封裝成抽象類,并且提供不同的廠商提供不同的零件,例如inter廠商和lenovo 廠商
建立電腦類提供讓電腦工作的函數,并且調用每個零件工作的接口
測試時組裝三台不同的電腦進行工作