8.2.2 令人迷惑的隱藏規則
本來僅僅區別過載與覆蓋並不算困難,但是c++的隱藏規則使問題複雜性陡然增加。這裡「隱藏」是指派生類的函式遮蔽了與其同名的基類函式,規則如下:
(1)如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式將被隱藏(注意別與過載混淆)。
(2)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆)。
因為我也是乙個在學習路上的小白,如果有錯誤的地方,懇請指正,謝謝!
第乙個例子:非虛函式的隱藏與過載
#define _crt_secure_no_warnings
#include #include #include using namespace std;
struct base
void func(int i) //這裡的func是過載關係 };
struct derived : public base
};struct derived2 : public base
};int main()
第二個例子:虛函式的隱藏、覆蓋與過載
#define _crt_secure_no_warnings
#include #include #include using namespace std;
struct base
void func(int i) //這裡的func同樣也是過載關係 };
struct derived : public base
};struct derived2 : public base
};int main()
總結:除了覆蓋繼承而來的虛函式之外,派生類最好不要重用其他定義在基類中的名字 類成員函式的過載 覆蓋與隱藏
基類和派生類類成員函式的過載 覆蓋 override 與隱藏很容易混淆,c 程式設計師必須要搞清楚概念,否則錯誤將防不勝防。1.過載與覆蓋 成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。覆蓋是指派生類函式覆蓋基類函式,特徵是 ...
C 類成員函式的過載 覆蓋與隱藏
1.過載 覆蓋與隱藏 1 過載 成員函式具有以下的特徵時發生 過載 a 相同的範圍 同乙個類中 b 函式的名字相同 c 引數型別不同 不能進行隱式型別轉換 d virtual關鍵字可有可無 2 覆蓋 也叫 繼承 指派生類函式覆蓋基類函式,特徵是 a 不同的範圍 分別位於基類與派生類中 b 函式名字相...
C 類成員函式的過載 覆蓋與隱藏
1.過載 覆蓋與隱藏 1 過載 成員函式具有以下的特徵時發生 過載 a 相同的範圍 同乙個類中 b 函式的名字相同 c 引數型別不同 不能進行隱式型別轉換 d virtual關鍵字可有可無 2 覆蓋 也叫 繼承 指派生類函式覆蓋基類函式,特徵是 a 不同的範圍 分別位於基類與派生類中 b 函式名字相...