過載 重寫(覆蓋)和隱藏的區別

2021-07-28 20:05:35 字數 1627 閱讀 1545



過載、重寫(覆蓋)和隱藏的區別

一、過載

過載從overload翻譯過來,是指同一可訪問區內被宣告的幾個具有不同引數列(引數的型別,個數,順序不同)的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。

示例**如下:

classa;
前四個互為過載函式,最後乙個和第乙個不是過載函式。

二、隱藏

隱藏是指派生類的函式遮蔽了與其同名的基類函式。注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏。

例項**如下:

#includeusing namespace std;

classa

};classb :

publica};

intmain()

三、重寫

重寫翻譯自override,也翻譯成覆蓋,是指派生類中存在重新定義的函式。其函式名,引數列表,返回值型別,所有都必須同基類中被重寫的函式一致。只有函式體不同(花括號內),派生類呼叫時會呼叫派生類的重寫函式,不會呼叫被重寫函式。重寫的基類中被重寫的函式必須有virtual修飾。

例項**如下:

#includeusing namespace std;

classa};

class b : publica};

intmain()

上面為虛函式實現多型的**,不明白的先看虛函式實現多型的原理。

四、區別

過載和重寫的區別:

(1)範圍區別:重寫和被重寫的函式在不同的類中,過載和被過載的函式在同一類中。

(2)引數區別:重寫與被重寫的函式引數列表一定相同,過載和被過載的函式引數列表一定不同。

(3)virtual的區別:重寫的基類必須要有virtual修飾,過載函式和被過載函式可以被virtual修飾,也可以沒有。

隱藏和重寫,過載的區別:

(1)與過載範圍不同:隱藏函式和被隱藏函式在不同類中。

(2)引數的區別:隱藏函式和被隱藏函式引數列表可以相同,也可以不同,但函式名一定同;當引數不同時,無論基類中的函式是否被virtual修飾,基類函式都是被隱藏,而不是被重寫。

除錯執行如下**:

#includeusing

namespace

std;

classa

void fun2(int

i)

virtual

void fun3(int

i)};

class b : publica//

重寫void fun3(int

i)//

隱藏void fun3(double

i)};

intmain()

輸出結果為:

b::fun3(int) : 3

b::fun3(

int) : 10

b::fun3(

int) : 20

請按任意鍵繼續. . .

過載 重寫(覆蓋) 隱藏

過載 同一訪問區 如類中 內被宣告的幾個具有 不同引數列 引數的型別,個數,順序不同 的 同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。隱藏 派生類的函式 遮蔽了它繼承的 基類同名函式,注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏。重寫 覆蓋 派生類中存在 同基類中函...

C 過載 重寫 覆蓋 和隱藏的區別

成員函式過載 overload 的特徵 1 相同的範圍 在同乙個類中 2 函式名相同 3 函式引數個數或者函式引數型別不相同 4 virtual關鍵字可有可無。作用 同一方法,根據傳遞訊息的不同 型別或者個數 產生不同的動作 相同的方法名,實現不同 重寫也叫覆蓋 override 覆蓋是指派生類的函...

關於覆蓋 隱藏 過載 重寫的區別

以下列表表示這幾個概念在語言表面上的差別 是否父子類 函式引數是否相同 含有virtual 函式同名 是 是 是 覆蓋 又叫重寫 繼承 override 目的就是實現多型 是 是 否隱藏 是 否 不相關 隱藏 符合正常的理解 同乙個類中 不相同 不相干 過載overload 回答兩個問題 一是訪問誰...