考慮virtual以外的實現
-
-
non-virtual-interface
-
Dase中調用virtual函數,Deried中重寫virtual函數,調用實際由Base確定,實現由Deried確認
-
-
Function Pointer
-
函數指針作為類的成員變量,另外提供接口調用函數指針指向的函數
-
-
使用模板函數對象代替函數指針
-
將不同功能的函數設計在兩個類中,實現成兩種不同的繼承體系
-
-
函數參數的缺省值是靜態綁定的,virtual是動態綁定的,所以不要重新定義參數的默認值
-
可以使用NVI方式解決,no-virtual函數調用virtual函數,因為no-virtual函數絕對不能被掩蓋,也就不會修改默認值
-
-
復合比繼承擴張性更好
謹慎的使用private繼承
-
-
能用復合就不用private,除非是特殊情況,Deried要繼承Base中的protect成員
-
private繼承可以節約內存
-
-
virtual繼承會增加復雜度等成本
-
多重繼承的使用場景:實現多個接口,繼承一個基類
- 建議:不使用多繼承,使用單繼承和實現多接口