c (成員函式的)過載 覆蓋與隱藏

2021-08-03 21:31:25 字數 699 閱讀 6068

覆蓋,和隱藏是很不一樣的兩個概念,要重點區分。

過載(overload):同名函式變數,但屬於不同的函式型別。發生在同乙個作用域內,即在同乙個類中。如果跨類,在父類、子類當中存在同名的函式變數(即便是不同的函式型別),如果是 virtual 性質的,就是過載(也叫繼承,函式層面的繼承),如果是 non-virtual 性質的,(只要子類中有乙個同名函式變數沒有用 virtual 修飾)就會發生隱藏——這個坑應該繞道走。

覆蓋(override):派生類函式覆蓋基類函式,必須有 virtual 關鍵字修飾,且函式型別相同,函式變數命名相同。

隱藏(hide):有些筆記中會寫作「overwrite」,但這個詞不是 c++ 中的術語,是不規範的寫法。在**層面上,隱藏很容易讓人困擾,但其本質上只是巢狀作用域中命名隱藏問題。和以下**同理。

ps 即便函式變數的型別不同,但編譯器只關注變數的命名。如果還是似懂非懂,感到困惑,可以去翻書《c++ primer》第 547 頁。

一如往常,名字查詢先於型別檢查。

void print(int var)

int main(void)

return 0;

}

在《effective c++》一書條款 36 提到「絕不重新定義繼承而來的 non-virtual 函式」,就是為了避免隱藏帶來的問題。

C 成員函式的過載 覆蓋與隱藏

成員函式的過載 覆蓋 override 與隱藏很容易混淆,c 程式設計師必須要搞清楚概念,否則錯誤將防不勝防。成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。覆蓋 派生類函式覆蓋基類函式,特徵是 1 不同的範圍 分別位於派生類與...

C 成員函式的過載 覆蓋與隱藏

成員函式的過載 覆蓋 override 與隱藏很容易混淆,c 程式設計師必須要搞清楚概念,否則錯誤將防不勝防。成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。覆蓋 派生類函式覆蓋基類函式,特徵是 1 不同的範圍 分別位於派生類與...

C 成員函式的過載 覆蓋與隱藏

一 成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual關鍵字可有可無。二 成員函式被覆蓋的特徵 1 不同的範圍 分別位於派生類與基類 2 函式名字相同 3 引數相同 4 基類函式中必須有virtua 關鍵字。三 成員函式被隱藏的規則 1 如果派生類...