覆蓋,過載,隱藏

2021-06-07 23:28:37 字數 838 閱讀 8871

覆蓋(重寫),過載,隱藏這三者的概念很容易混淆,弄清楚這三者的區別與聯絡是有必要的.
覆蓋(重寫)->override,過載->overload,多型->polymorphis
函式名字相同

引數不相同(引數個數或引數型別不同)

相同作用域

virtual關鍵是可有可無

函式名字相同

引數相同(引數個數和引數型別都必須一致)

不同作用域(基類和派生類)

virtual關鍵字必須有

如果函式名字相同,但引數不相同(引數個數或引數型別不同).此時,不管函式是否被定義為virtual,基類的函式都將被派生類的同名函式隱藏(區分於函式過載:作用域不相同);

如果函式名字相同,引數也相同(引數個數和引數型別都必須一致).此時,函式卻沒有被定義為virtual,基類的函式都將被派生類的同名函式隱藏(區分於函式覆蓋:沒有virtual關鍵字限定).

class base

void f(float x)

void h(float x)

virtual void g(int x)

};class derived : public base

/*對base::f(float)的隱藏(注意與覆蓋區別)*/

void f(float x)

/*對base::h(float)的隱藏(注意與過載區別)*/

void h(int x)

/*對base::g(int)的覆蓋*/

virtual void g(int x)

};

過載 覆蓋 隱藏

學習c 些許時間了,隨便寫點東西吧。過載 覆蓋 隱藏 1.過載 相同作用域,函式名相同,引數不同,virtual關鍵字可有可無。2.覆蓋 不同作用域,函式名相同,引數相同,有virtual關鍵字。3.隱藏 一般是父類和子類之間,函式名相同,引數不同時,不管有沒有virtual關鍵字都會導致隱藏。函式...

覆蓋,隱藏,過載

1.過載 覆蓋與隱藏 1 過載 成員函式具有以下的特徵時發生 過載 a 相同的範圍 同乙個類中 b 函式的名字相同 c 引數型別不同 不能進行隱式型別轉換 d virtual關鍵字可有可無 2 覆蓋 也叫 繼承 指派生類函式覆蓋基類函式,特徵是 a 不同的範圍 分別位於基類與派生類中 b 函式名字相...

過載,覆蓋,隱藏

過載產生於乙個類,實現不同定義,統一介面。覆蓋產生與多個類,實現多型概念。隱藏多產生於繼承或者派生,屬於命名空間作用域範疇。當乙個類呼叫存在多重繼承時,呼叫函式和變數時 首先訪問自己的作用域,在自己作用域不存在,訪問父類,還不存在繼續向上查詢,直到全域性命名空間 注意命名空間指名稱,不包括引數,返回...