過載(overload):在c++程式中,可以將語義、功能相似的幾個函式用同乙個名字表示,但是函式引數不同,即構成函式過載。
(1)相同的範圍(在同乙個類或域中)
(2)函式名稱相同
(3)函式引數不同(引數型別、引數個數、引數順序)
(4)不考慮返回型別
(5)不考慮virtual關鍵字
重寫(又叫覆蓋,override):派生類函式覆蓋基類函式。
(1)不同的範圍(在同一種類中(父子類))
(2)函式名稱相同
(3)函式引數相同(引數型別、引數個數、引數順序)
(4)返回型別相同
(5)基類必須有virtual關鍵字
注:重寫基類虛函式的時候,會自動轉換這個函式為virtual函式,不管有沒有加virtual,因此重寫的時候不加virtual也是可以的,不過為了易讀性,還是加上比較好。
重定義(又叫隱藏,redefining):派生類的函式遮蔽了與其同名的基類函式。
(1)如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式將被隱藏(注意別與過載混淆)。
(2)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆)。
例一:
class
base
voidg(
float x)
voidh(
float x)};
class
derived
:public base
voidg(
int x)
voidh(
float x)};
void
main()
例二:
class
base
void
say(
)public
:void
exec()
void
f1(string a)
voidf1(
int a)
//overload過載,兩個函式在base類內部被過載};
class
deriveda
:public base
//override重寫,基類中display為虛函式,故此處為重寫
voidf1(
int a,
int b)
//redefining重定義,f1函式在base類中不為虛函式,故此處為重定義
void
say(
)//redefining重定義,同上};
class
derivedb
:public base
//redefining重定義};
void
main()
例三:
class
a//friend void print(a a)};
classb:
public a };
classc:
public b};
void
print
(a a)
void
main()
過載 重寫(覆蓋) 隱藏(重定義)
1 過載要求 函式名相同,引數不同 個數 型別 常函式也可以作為過載判斷。注意返回值不是過載的判斷標準。2 重寫 即覆蓋 要求 要求基類函式為虛函式,且基類函式和派生類函式名 引數等相同。3 隱藏 即重定義 要求 子類重新定義父類中有相同名稱的非虛函式 引數列表可以不同 4 重寫和隱藏都是發生在基類...
c 過載,重寫 覆蓋,重定義 隱藏
關於c 的過載,重寫 又稱覆蓋 重定義 又稱隱藏 來做乙個小小的總結。過載最主要是指在同一作用域下的函式名相同,引數不同的函式過載,其強調同一作用域。同名同參,不同返回值不能作為過載,編譯器會提示函式重複定義。重寫和重定義主要在體現在繼承行為中,子類對父類函式的操作。重寫是虛函式的正確用法,指子類對...
C 過載 重寫 覆蓋 重定義 隱藏
我們經常會被過載 重寫 重定義經常被我搞混,今天就專門總結區別一下。1.過載概念 過載指的都是函式過載,函式過載就是函式的一種特殊情況,c 允許在同一作用域中宣告幾個功能類似的同名函式,這些同名函式的形参列 表 引數個數 型別 順序 必須不同,常用來處理實現功能類似資料型別不同的問題。2.構成過載的...