覆蓋(重寫),過載,隱藏這三者的概念很容易混淆,弄清楚這三者的區別與聯絡是有必要的.覆蓋(重寫)->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 函式名字相...
過載,覆蓋,隱藏
過載產生於乙個類,實現不同定義,統一介面。覆蓋產生與多個類,實現多型概念。隱藏多產生於繼承或者派生,屬於命名空間作用域範疇。當乙個類呼叫存在多重繼承時,呼叫函式和變數時 首先訪問自己的作用域,在自己作用域不存在,訪問父類,還不存在繼續向上查詢,直到全域性命名空間 注意命名空間指名稱,不包括引數,返回...