重載(overloading)和重寫(overriding)都是面向?qū)ο缶幊讨械母拍?,但是它們有不同的含義和用法。
重載(overloading)是指在同一個(gè)作用域內(nèi)使用相同的函數(shù)名,但是參數(shù)列表不同的多個(gè)函數(shù),這些函數(shù)稱為重載函數(shù)。在C++中,函數(shù)的重載是靜態(tài)多態(tài)性的一種表現(xiàn)。編譯器在編譯時(shí)會(huì)根據(jù)調(diào)用函數(shù)時(shí)的參數(shù)列表來(lái)確定要調(diào)用的函數(shù)。重載函數(shù)可以有不同的返回類型,但是不能只有返回類型不同而參數(shù)列表相同。
重寫(overriding)是指在派生類中重新定義基類中已經(jīng)定義的虛函數(shù)(或者基類中的純虛函數(shù))。重寫函數(shù)必須和基類函數(shù)具有相同的函數(shù)簽名(函數(shù)名和參數(shù)列表),并且必須是虛函數(shù)。重寫函數(shù)可以有不同的實(shí)現(xiàn),但是必須具有相同的函數(shù)簽名。
總結(jié)來(lái)說(shuō),重載是在同一個(gè)類中定義多個(gè)同名函數(shù),根據(jù)參數(shù)列表的不同來(lái)區(qū)分調(diào)用;而重寫是在派生類中重新定義基類中的虛函數(shù),實(shí)現(xiàn)多態(tài)性。