類的派生中 過載 重寫(覆蓋)隱藏 三種的區別

2021-10-16 17:50:37 字數 1526 閱讀 3545

兩兩之間的區別

**總結

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

class

a;

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

#include

using

namespace std;

class

base};

class

derived

:public base};

intmain()

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

#include

"stdafx.h"

#include

"iostream"

using

namespace std;

class

base};

/************************************/

class

derive

:public base

//隱藏了基函式};

intmain()

靜態方法、成員變數不能重寫,只可以隱藏;例項方法可以重寫

重寫與隱藏的本質區別:

重寫是動態繫結,根據執行時引用所指向物件的實際型別來決定呼叫相關類的成員。

隱藏是靜態繫結的,根據編譯時引用的靜態型別來決定呼叫相關類的成員。

換句話,執行時候的區別在這裡

如果子類重寫了父類的方法,當父類的引用指向子類物件時,通過父類的引用呼叫的是子類的方法。

如果子類隱藏了父類的方法(成員變數),通過父類的引用呼叫的仍然是父類的方法(成員變數).

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

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

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

範圍區別:過載是在同乙個類中,隱藏是派生的類隱藏基類

參考文獻

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

一 過載 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual關鍵字可有可無。二 重寫 覆蓋是指派生類函式覆蓋基類函式 1 不同的範圍 分別位於派生類與基類 2 函式名字相同 3 引數相同 4 基類函式必須有virtual關鍵字。三 隱藏 隱藏 是指派生類的函式遮蔽了與其...

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

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

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

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