重載(overload)
指函數(shù)名相同,但是它的參數(shù)表列個數(shù)或順序,類型不同。但是不能靠返回類型來判斷。
(1)相同的范圍(在同一個作用域中) ;
(2)函數(shù)名字相同;
(3)參數(shù)不同;
(4)底層const可以重載, 頂層不行;
(5)virtual 關鍵字可有可無。
(6)返回值可以不同;
重寫(也稱為覆蓋 override)
是指派生類重新定義基類的虛函數(shù),特征是:
(1)不在同一個作用域(分別位于派生類與基類) ;
(2)函數(shù)名字相同;
(3)參數(shù)相同;
(4)基類函數(shù)必須有 virtual 關鍵字,不能有 static 。
(5)返回值相同(或是協(xié)變),否則報錯;<—-協(xié)變這個概念我也是第一次才知道…
(6)重寫函數(shù)的訪問修飾符可以不同。盡管 virtual 是 private 的,派生類中重寫改寫為 public,protected 也是可以的
重定義(也成隱藏)
(1)不在同一個作用域(分別位于派生類與基類) ;
(2)函數(shù)名字相同;
(3)返回值可以不同;
(4)參數(shù)不同。此時,不論有無 virtual 關鍵字,基類的函數(shù)將被隱藏(注意別與重載以及覆蓋混淆) 。
(5)參數(shù)相同,但是基類函數(shù)沒有 virtual關鍵字。此時,基類的函數(shù)被隱藏(注意別與覆蓋混淆) 。