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

2022-06-03 05:45:12 字數 1737 閱讀 6953

**自:

基本概念:

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

1

class

a;

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

1 #include "

stdafx.h

"2 #include "

iostream"3

4using

namespace

std;56

class

base710

};11

12class derive : public

base

1316

};17

18int

main()

19

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

注:fd為基類的指標,這是呼叫fun是基類的函式

1 #include2

3using

namespace

std;45

class

base69

};10

11class derived : public

base

1215

};16

intmain()

17

過載和重寫的區別:

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

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

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

隱藏和重寫,過載的區別:

(1)與過載範圍不同:隱藏函式和被隱藏函式在不同類中。

(2)引數的區別:隱藏函式和被隱藏函式引數列表可以相同,也可以不同,但函式名一定同;當引數不同時,無論基類中的函式是否被virtual修飾,基類函式都是被隱藏,而不是被重寫。 

1 #include "

stdafx.h

"2 #include 3

4using

namespace

std;56

class

base710

void g(float x)

11void h(float x)

12};

1314

class derived : public

base

1518

void g(int x)

19void h(float x)

20};

2122

int main(void)23

(1)函式derived::f(float)覆蓋了base::f(float)。

(2)函式derived::g(int)隱藏了base::g(float),而不是過載。

(3)函式derived::h(float)隱藏了base::h(float),而不是覆蓋。

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

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

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

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

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

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