函式過載 重寫(覆蓋)和重定義(隱藏)

2021-08-02 05:21:50 字數 1668 閱讀 1104

過載(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.構成過載的...