過載 重寫 隱藏

2021-06-05 22:19:16 字數 722 閱讀 3109

共同點:函式名相同

定義:

1)如果在類裡函式名相同但是形參不同,則為過載。形參不同包括形參的型別個數以及順序。

2)類間。重寫和隱藏都發生在基類和派生類之間。

重寫(覆蓋):發生在派生類和基類之間。必須滿足兩個條件:(1)基類有virtual宣告(2)函式名和形參必須完全相同。

隱藏:發生在派生類和基類之間,必須滿足以下兩個條件:(1)派生類中函式名與基類相同(2)基類中沒有virtual宣告或形參不同。

即子類重新定義基類的非虛函式。

過載和覆蓋的區別:

1,方法的覆蓋是基類和子類的關係,是垂直關係。

方法的重寫是同乙個類中不同方法之間的關係,是水平關係。

2,在覆蓋中要求函式原型完全相同,在重寫中只要求函式名相同且形參不同。

3,過載是根據實參表和形參表來匹配函式的,是在編譯的時候進行的是早繫結。覆蓋是根據物件對應儲存空間的型別來選擇函式體的,是在執行的時候動態繫結的,是晚繫結。

4,隱藏及子類重新定義基類的虛函式。

5,如果基類的函式要在子類中重新定義,就要在基類中申明virtual.另一方面,如果乙個函式不會再子類中重新定義,就不要virtual,因為在執行時動態繫結虛函式要占用系統資源和時間。

6,在vs2010中,當定義兩個完全相同的函式時,不會報錯,而當呼叫這個函式時就會報錯,即使沒有執行。過載的函式匹配不是在編譯的時候進行的。而是在預處理階段進行的,與教科書上的結論矛盾。作何解釋?歡迎討論!!

過載 重寫(覆蓋) 隱藏

過載 同一訪問區 如類中 內被宣告的幾個具有 不同引數列 引數的型別,個數,順序不同 的 同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。隱藏 派生類的函式 遮蔽了它繼承的 基類同名函式,注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏。重寫 覆蓋 派生類中存在 同基類中函...

過載 重寫和隱藏

過載 a 相同的範圍 在同乙個類中 b 函式名字相同 c 引數不同 返回型別不足以區分過載函式 d virtual關鍵字可有可無 重寫 實際上就是虛函式動態繫結 a 不同的範圍,分別位於基類和派生類中 b 函式的名字相同 c 引數相同 e 一般情況下返回型別相同 除非返回型別分別為基類指標和派生類指...

C 的過載 重寫 隱藏

在同乙個class中 class demo 在同一訪問區內 如在同一.c cpp檔案內 即不在struct或者class中 4個fun都是過載函式 intfun int a void fun double a int fun int a,int b int fun float a 父類 class ...