对于C++中多态的理解
生活随笔
收集整理的這篇文章主要介紹了
对于C++中多态的理解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于C++中多態的理解
- 概述
- 函數的調用方式
- 靜態綁定
- 動態綁定
- 動態綁定的條件
- 多態的用法
- C++中多態的實現
- 參考
概述
OOP或者OOD的概念中,包含有復合composition,委托delegation和繼承inheritance三種關系。其中最復雜的就是inheritance。
繼承時,子類Derived Class繼承的是:
- 父類Base Class的所有數據
- 父類所有函數的調用權
體現inheritance精髓的就是多態了。
這里有幾個概念基本是等效的 多態 = 虛函數 = 動態綁定
函數的調用方式
在匯編語言中,函數的調用是通過CALL指令實現的。
在C++中,根據CALL指令后面的參數,函數的調用分為動態綁定和靜態綁定兩種。
靜態綁定
普通的函數,在編譯鏈接后,就確定了其調用地址。所謂靜態綁定,就是函數的地址是在鏈接階段確定了,無需等到運行時重新計算。
體現為 call address_xxx 的形式
動態綁定
動態綁定則是在運行時才確定函數的調用地址。在C++中,虛函數的調用就是通過這種方式實現的。
動態綁定的條件
多態的用法
動態綁定技術也被稱為多態,即一種函數名稱(虛函數名),多種形態(虛函數的實體由不同的子類實現)。
典型的用法是,通過將同一各基類的不同子類的指針放到一組容器中,容器以基類指針為類型,通過指針調用不同子類的虛函數的實現
C++中多態的實現
C++在實現多態時,使用了虛指針vptr+虛表vtable的方式。
- 若父類的虛函數未被重寫override,則該虛函數地址為父類虛函數地址
- 若父類的虛函數被重寫override,則該虛函數地址為子類虛函數地址
動態綁定的調用方式
p為指向對象的指針,最終動態綁定的虛函數被編譯為 (*(p->vptr)[n])§;
最后的§表示p作為this指針被傳入。
參考
侯捷老師的C++程序設計(II)
總結
以上是生活随笔為你收集整理的对于C++中多态的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 读书笔记——《迁移到云原生架构》
- 下一篇: s3c2440移植MQTT