兩兩之間的區別
**總結
是指同一可訪問區內被宣告的幾個具有不同引數列(引數的型別,個數,順序不同)的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。
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 前四個互為過載函式,最後乙個和第乙個不是過載函式。二 隱藏 ...