C++重载(overload)和重写(覆盖)的区别?
生活随笔
收集整理的這篇文章主要介紹了
C++重载(overload)和重写(覆盖)的区别?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
重載:是指允許存在多個同名函數,而這些函數的參數表不同(或許參數個數不同,或許參數類型不同,或許兩者都不同)。
重寫:是指子類重新定義父類虛函數的方法。
從實現原理上來說:
重載:編譯器根據函數不同的參數表,對同名函數的名稱做修飾,然后這些同名函數就成了不同的函數(至少對于編譯器來說是這樣的)。如,有兩個同名函數:function func(p:integer):integer;和function func(p:string):integer;。那么編譯器做過修飾后的函數名稱可能是這樣的:int_func、str_func。對于這兩個函數的調用**,在編譯器間就已經確定了,是靜態的**。也就是說,它們的地址在編譯期就綁定了(早綁定),因此,重載和多態無關!
重寫:和多態真正相關。當子類重新定義了父類的虛函數后,父類指針根據賦給它的不同的子類指針,動態的調用屬于子類的該函數,這樣的函數調用在編譯期間是無法確定的(調用的子類的虛函數的地址無法給出)。因此,這樣的函數地址是在運行期綁定的(晚綁定)。
總結
以上是生活随笔為你收集整理的C++重载(overload)和重写(覆盖)的区别?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 贷款车怎么卖
- 下一篇: C++在哪几种情况只能用intializ