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

2021-06-26 13:09:02 字數 1725 閱讀 5810

成員函式過載(overload)的特徵:

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

2、函式名相同;

3、函式引數個數或者函式引數型別不相同;

4、virtual關鍵字可有可無。

作用:同一方法,根據傳遞訊息的不同(型別或者個數),產生不同的動作(相同的方法名,實現不同)

重寫也叫覆蓋(override),覆蓋是指派生類的函式覆蓋基類的函式:

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

2、函式名相同;

3、函式引數和函式返回值都相同;

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

作用:基類指標和引用在呼叫對應方法時,根據所指物件型別實現動態繫結。

隱藏是指派生類的函式遮蔽了與其同名的基類函式:

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

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

作用:隱藏進行靜態繫結,取決於呼叫的指標或者應用型別,而非基類指標或者引用指向的物件型別。使用時,隱藏容易產生混淆,應極力避免。

//

// person.h

//#ifndef person_h_included

#define person_h_included

#include class person

;#endif // person_h_included

//

// person.cpp

//#include "person.h"

person::person()

person::~person()

// 過載

void person::add(int x, int y)

void person::add(int x, int y, int z)

void person::add(float x, float y)

// 重寫(覆蓋)

void person::sub(int x, int y)

//

// student.h

//#ifndef student_h_included

#define student_h_included

#include #include "person.h"

class student : public person

;#endif // student_h_included

//

// student.cpp

//#include "student.h"

student::student()

student::~student()

// 重寫(覆蓋)

void student::sub(int x, int y)

//

// main.cpp

//#include #include #include "person.h"

#include "student.h"

int main()

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

過載 重寫 覆蓋 和隱藏的區別 一 過載 過載從overload翻譯過來,是指同一可訪問區內被宣告的幾個具有不同引數列 引數的型別,個數,順序不同 的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。示例 如下 classa 前四個互為過載函式,最後乙個和第乙個不是過載函式。二 隱藏 ...

過載 重寫(覆蓋) 隱藏

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

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

基本概念 過載 是指同一可訪問區內被宣告的幾個具有不同引數列 引數的型別,個數,順序不同 的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。示例 class a 隱藏 是指派生類的函式遮蔽了與其同名的基類函式,注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏。示例 incl...