C 中的過載 覆蓋和隱藏的區分

2021-08-26 01:26:13 字數 1187 閱讀 1631

今天看書遇到了c++中比較難纏的概念,就是過載、覆蓋和隱藏。如果只要區分過載和覆蓋,相信應該沒有什麼難度,並且它們的界限還是比較清晰的。現在加上了隱藏,初次看這些概念還真是不好區分。下面總結一下它們之間的區別:

成員函式的[b][color=red]過載[/color][/b]的特徵有以下4點:

(1) 必需在相同的範圍內,即在同乙個類的內部;

(2) 函式名稱相同;

(3) 函式的引數不相同;

(4) virtual關鍵字可選,即可以加上也可以不加上,不影響過載的發生。

覆蓋是指派生類函式覆蓋基類函式,它的特徵有以下4點:

(1)必需在不同的範圍中,即分別在派生類和基類中;

(2) 函式名稱相同;

(3) 引數也必需相同;

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

而隱藏行為則必需符合以下兩條規則:

(1) 如果派生類的函式與基類的函式的名稱相同,但是引數不同。此時,不管有無virtual關鍵字,基類的函式都會被派生類的同名函式隱藏;

(2) 如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual關鍵字。這個時候基類的同名函式也會被隱藏。

下面demo說明了覆蓋和隱藏之間的區別

覆蓋例子:

#include

#include

using namespace std;

class a

system("pause");

return exit_success;

}

上面的例子是覆蓋,由於基類a中和派生類b中的hello函式的簽名完全相同,而且基類a中有virtual關鍵字,所以基類a中的hello函式被派生類b中的hello函式所覆蓋,因此具有多型的特性(只有覆蓋才具有多型的特徵)。

這段**顯示的結果為:

[img]

稍微改動上述**,得到下面的例子:

#include

#include

using namespace std;

class a

system("pause");

return exit_success;

}

改動後**執行的結果是:

[img]

C 中的過載 覆蓋和隱藏的區分

c 中經常用到過載 覆蓋和隱藏這三個概念,也經常容易搞混。所以,這篇博文來整理一下它們之間的異同。1.過載 實現多型性 a 相同的範圍 同乙個類中 b 函式的名字相同 c 引數型別不同 不能進行隱式型別轉換 d virtual關鍵字可有可無 2.覆蓋 重寫 派生類函式覆蓋基類函式 a 不同的範圍 分...

C 中覆蓋,過載和隱藏

include using namespace std struct foo void func int x 那麼,如果不用 using 宣告,拆分後 中的函式 func 不是過載應該是什麼呢?是隱藏 hide 下面是關於過載 覆蓋和隱藏的區別 這幾個概念都有乙個共同點 函式名稱相同,所以不免讓人混...

關於C 中的過載,覆蓋和隱藏

關於第八章中的 c 中的過載,覆蓋和隱藏 有一點沒看明白,貼上來,希望有高手指點.原文 如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual關鍵字。此時,基類的函式被隱藏 關於這句話,書上的例子如下 include class base void g float x vo...