C 繼承 6 隱藏基類中的所有過載函式

2021-07-02 20:17:44 字數 1066 閱讀 2832

目錄

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 的過載 覆蓋 隱藏 繼承

函式過載 函式的繼承 這個不多說 子類繼承父類的公有變數 函式的覆蓋 也是重寫 關於子類修改了父類的成員函式 所以呼叫跟父類同名的成員函式 顯示的是子類的修改的函式的輸出方式 函式的隱藏 在父類和子類都有同名函式時,可以是顯示父類的函式輸出方式 也可以是顯示子類的輸出方式 但兩者會顯示的原因不同,如...