過載 覆蓋 隱藏的區別

2021-06-21 17:16:25 字數 803 閱讀 1440

過載、覆蓋、隱藏的區別

成員函式被過載的特徵

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

(2)函式名字相同; 

(3)引數不同; 

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

覆蓋是指派生類函式覆蓋基類函式,特徵是

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

(2)函式名字相同; 

(3)引數相同; 

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

「隱藏」是指派生類的函式遮蔽了與其同名的基類函式,規則如下

(1)如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式將被隱藏(注意別與過載混淆)。 

(2)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual 關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆) 

3種情況怎麼執行: 1。過載:看引數 2。隱藏:用什麼就呼叫什麼 3。覆蓋:呼叫派生類 

這三個概念都是與oo中的多型有關係的。如果單是區別過載與覆蓋這兩個概念是比較容易的,但是隱藏這一概念卻使問題變得有點複雜了,下面說說它們的區別吧。 

過載是指不同的函式使用相同的函式名,但是函式的引數個數或型別不同。呼叫的時候根據函式的引數來區別不同的函式。

覆蓋(也叫重寫)是指在派生類中重新對基類中的虛函式(注意是虛函式)重新實現。即函式名和引數都一樣,只是函式的實現體不一樣。

隱藏是指派生類中的函式把基類中相同名字的函式遮蔽掉了。隱藏與另外兩個概念表面上看來很像,很難區分,其實他們的關鍵區別就是在多型的實現上。什麼叫多型?簡單地說就是乙個介面,多種實現吧。

過載 覆蓋 隱藏的區別

在csdn上經常看到這種問題 如何區別3者,從論壇中已經能夠找到完善的答案,現在自己也總結一下,加深印象,同時希望對讀者您有用。這不是乙個新的概念,在c 中乙個比較重要的概念 c語言裡面不允許 特徵就是允許函式名相同,通過指定不同的引數或者返回值來區別。這裡我們所說的過載是針對c 中類的,類中過載與...

過載 覆蓋 隱藏的區別

高質量c c程式設計指南 已經清晰的列出了過載函式的特性 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual關鍵字可有可無。因為函式引數不同,可以簡單的理解為 兩個過載函式是不同的函式,呼叫者能夠明確 的根據不同的引數來呼叫不同的函式。那麼如果存在這樣兩個函式,編譯器怎...

隱藏,覆蓋,過載的區別

1 先說過載,1首先兩個函式的作用域必須相同,這點很重要,基類和派生類不在乙個作用域,所以基類和派生類的函式不可能過載 2函式名相同,3引數列表 引數型別,引數的個數,引數了順序 不相同,4與返回值無關,叫過載 2 隱藏 在基類和派生類之間發生的關係,函式名相同,派生類的函式把基類的函式給隱藏了,只...