類中的同名函式關係,過載,覆蓋 重寫,隱藏

2022-09-18 02:33:32 字數 754 閱讀 1746

對於類中的同名函式,過載,覆蓋/重寫,隱藏

c++特性,不是類亦可以實現過載,與virtual無關聯。

過載:同一類域抑或無類域,相同函式名,不同形參個數或型別;由形參決定呼叫哪個函式實現。同類域同名函式相同形參會引起編譯錯誤。

virtual修飾函式需要相同的返回值與形參型別,多型特性則需要該修飾符才能體現。

重寫/覆蓋:基類與派生類關係,同樣的函式名,相同形參個數與型別,基類函式有virtual修飾;派生類執行派生類函式而不是基類函式實現,指標與引用的多型體現出來了,即基類指標或引用可根據指向實際子類的型別來執行對應派生類實現,如要執行基類函式仍可通過類域指定。

隱藏:基類與派生類關係,同樣的函式名,相同形參個數與型別,基類函式無virtual修飾;未指定類域,由變數型別確定用哪個函式實現。

即使基類指標指向派生類,呼叫同名函式仍然是呼叫基類函式;因為無virtual修飾是無法體現多型的。

備註:基類與派生類關係,相同函式名,不同形參個數與型別,基類函式有/無virtual修飾;編譯器根據實參確定呼叫哪個類的實現,如果當前類變數型別未宣告則引起編譯錯誤。

1.派生類變數(包括指標與引用)編譯器會找當前派生類宣告,基類的宣告無效,子類無法繼承。

2.基類變數 (包括指標與引用)編譯器會找基類宣告,子類宣告無效,多型無法體現;就算基類指標指向子類,如果基類未宣告編譯仍然出錯。

故所謂隱藏只是乙個說法,並非規則。了解c++編譯器,都知道編譯器通過引數識別,然後找類中的宣告,有則呼叫,無則報錯。

edit by yexf

覆蓋(重寫)與過載的關係

方法的過載 1.同一類或與他的派生類中,方法名相同,而引數列表不同的方法,不同指的是引數的型別 數量 順序這三種中至少有一種不同。2.過載與返回值型別無關 與訪問修飾符無關,構造方法也可以過載 方法的重寫 判斷的標誌 override 特點 1.在有繼承關係的子類中重寫父類中的方法 2.方法名相同,...

同名函式的三種關係(過載,隱藏,覆蓋)

1.過載 class base void show int i 這兩個函式就構成了過載,在相同的作用域內,函式名相同,引數不同 2.隱藏 隱藏很簡單,就是派生類中的函式會隱藏基類中同名的函式,無關其他 class base class derive public base 隱藏發生後,父類還是呼叫父...

c 中 過載,重寫,覆蓋

過載 作用域內,函式名相同,函式引數不同 重寫 父類的virtual成員函式,子類重寫了函式體 覆蓋 1.子類重寫父類函式後,將導致父類裡被重寫函式及其過載函式被覆蓋 2.子類成員函式與父類成員函式,構成過載時,將導致父類裡成員函式被覆蓋 class p virtual p virtual void...