過載 覆蓋 隱藏

2021-06-25 08:03:47 字數 1319 閱讀 9597

學習過c++基礎課程的人,對過載函式的概念相對熟悉一些,但是對覆蓋和隱藏就相對陌

生了,在程式設計技術的學習上,你會發現乙個規律,很多知識點你都知道,但是一旦用起來,

就常常出錯,為什麼呢?筆者一直都在探索這個問題。。

過載函式有哪些特性呢?

《高質量c++/c程式設計指南》已經清晰的列出了過載函式的特性:

(1)相同的範圍(在同乙個類中);

(2)函式名字相同;

(3)引數不同;

(4)virtual關鍵字可有可無。

因為函式引數不同,可以簡單的理解為:兩個過載函式是不同的函式,呼叫者能夠明確

的根據不同的引數來呼叫不同的函式。那麼如果存在這樣兩個函式,編譯器怎麼處理呢?

class a

void func(int a)

};int main()

當然,對於這樣兩個函式,呼叫者不知道應該呼叫哪個函式,故編譯器直接報錯。

我們在看看,覆蓋和隱藏分別是什麼特性呢?從字面意思來講,覆蓋和隱藏都具有乙個把另

乙個給遮住了,那只不過是誰遮誰的問題。

覆蓋,是指派生類函式覆蓋基類函式,只作用於派生類函式,其特性為:

(1)不同的範圍(分別位於派生類與基類);

(2)函式名字相同;

(3)引數相同;

(4)基類函式必須有virtual關鍵字。

我們發現,這裡用到了虛函式,實際上虛函式的作用,就是實現覆蓋。

隱藏,是指派生累函式將基類函式給藏起來了,當然只作用於派生類函式,其特性與覆

蓋不同。

(1)如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字

,基類的函式將被隱藏。

(2)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual關

鍵字。此時,基類的函式被隱藏。

這裡的隱藏和覆蓋的含義,感覺上非常的模糊,甚至不清,並且隱藏的規則,常常令人感覺

到神出鬼沒。。。

請參看如下例項:

class base

void g(float x)

void h(float x)

};class derived : public base

void g(int x)

void h(float x)

};void main(void)

令人非常不解,bp和dp指向同一位址,按理說執行結果應該是相同的,可事實並非這樣。所

以我們還是要想辦法擺脫隱藏。

還有一點要切忌,對於static這種靜態成員函式,是屬於類的方法,而不是物件的方法,所

以static方法絕對不能被覆蓋或者隱藏。

過載 覆蓋 隱藏

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

覆蓋,隱藏,過載

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

覆蓋,過載,隱藏

覆蓋 重寫 過載,隱藏這三者的概念很容易混淆,弄清楚這三者的區別與聯絡是有必要的.覆蓋 重寫 override,過載 overload,多型 polymorphis函式名字相同 引數不相同 引數個數或引數型別不同 相同作用域 virtual關鍵是可有可無 函式名字相同 引數相同 引數個數和引數型別都...