目錄
1.引數列表相同時的隱藏
2.引數列表不同時的隱藏
c++中,如果子類重新定義了基類中的成員函式,則基類中所有相同函式名的函式都會被隱藏起來。
例如,下面的程式會編譯失敗。
因為derived重定義了基類方法fun(),這使得基類的fun(int i)被隱藏。所以子類物件無法呼叫此函式。
#includeusing namespace std;
class base
int fun(int i)
};class derived : public base
};int main()
編譯錯誤。visual studio 2015報錯如下:
error c2660: 「derived::fun」: 函式不接受 1 個引數
message : 參見「derived::fun」的宣告
編譯器提示在子類中找不到匹配的函式。
即使在基類base中的兩個fun函式前面,任意乙個加上virtual關鍵字,或者都加上virtual,都會報下面同樣的編譯錯誤。
編譯器提示在子類中找不到匹配的函式。
即使子類成員函式的引數列表不同於基類,仍然會將基類中所有相關的過載函式隱藏起來。
例如下面程式中,derived::fun(char ) 使得base::fun() 和 base::fun(int ) 都被隱藏。
#includeusing namespace std;
class base
int fun(int i)
};class derived : public base
};int main()
編譯結果:
error c2660: 「derived::fun」: 函式不接受 0 個引數
message : 參見「derived::fun」的宣告
注意:上面的行為,不論對於static還是non-static方法,都是適用的。
繼承中的過載 隱藏
過載關係 一組函式要過載,必須處於同一作用域下。而且函式名字相同引數列表不同。class base void show void show int private int ma class derive public base void show 1 void show int 2 遮蔽之後再進行呼...
C 繼承結構中的過載與隱藏
includeusing namespace std class base void show void show int protected int ma class derive public base void show protected int mb int main derive類中沒有...
C 的過載 覆蓋 隱藏 繼承
函式過載 函式的繼承 這個不多說 子類繼承父類的公有變數 函式的覆蓋 也是重寫 關於子類修改了父類的成員函式 所以呼叫跟父類同名的成員函式 顯示的是子類的修改的函式的輸出方式 函式的隱藏 在父類和子類都有同名函式時,可以是顯示父類的函式輸出方式 也可以是顯示子類的輸出方式 但兩者會顯示的原因不同,如...