一、繼承與派生 Inheritance and Derived
二、封裝 Encapsulation
隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。封裝體譬如函數,類。
三、賦值兼容
- 子類對象可以賦值給父類對象
- 父類對象不能賦值給子類對象
- 父類的指針/引用可以指向子類對象
- 子類的指針/引用不能指向父類對象(但可以通過強制類型轉換完成)
四、轉發函數
五、基於static成員的繼承
六、虛函數
1.在基類用virtual聲明成員函數爲虛函數。這樣就可以在派生類中重新定義此函數,爲它賦予新的功能,並能方便被調用。(在類外定義虛函數時,不必再次定義virtual)
2.在派生類中重新定義此函數,要求函數名,函數類型,函數參數個數和類型全部與基類的虛函數相同,並根據派
生類的需要重新定義函數體。
3.當一個成員函數被聲明爲虛函數後,其派生類的同名函數都自動成爲虛函數。因此在派生類重新聲明該
虛函數時,可以加virtual,也可以不加(習慣上添加)。
4.如果再派生類中沒有對基類的虛函數重新定義,則派生類簡單的繼承基類的虛函數。5.定義一個指向基類對象的指針變量,並使它指向同一類族中需要調用該函數的對象,通過該指針變量調用此虛函數,此時調用的就是指針變量指向的對象的同名函數。
七、多態 Polymorphism
多態就是指父類引用指向子類對象(對不同對象發送同一消息,不同對象會做出不同反應)
靜態多態(編譯時多態)
靜態多態就是在系統編譯期間就可以確定程序執行到這裏將要執行哪個函數。
動態多態(運行時多態)
動態多態則是利用虛函數實現了運行時的多態,也就是說在系統編譯的時候並不知道程序將要調用哪一個函數,只有在運行到這裏的時候才能確定接下來會跳轉到哪一個函數的棧幀。在使用基類對象指針調用派生類對象的虛函數的過程中就實現了動態多態。
總結:(摘自https://blog.csdn.net/QQ575787460/article/details/8542660)
應用形式上:
靜多態是發散式的,讓相同的實現代碼應用於不同的場合。
動多態是收斂式的,讓不同的實現代碼應用於相同的場合。
思維方式上:
靜多態是泛型式編程風格,它看重的是算法的普適性。
動多態是對象式編程風格,它看重的是接口和實現的分離度。