C 函式的過載 重寫與隱藏

2021-08-20 09:23:45 字數 1566 閱讀 2890

1、幾個概念與區別

(1)函式重寫:也稱作覆蓋,是用於類的繼承中,函式名、引數個數、型別都相同,僅函式體不同。

(2)函式過載:是指同一作用域的不同函式使用相同的函式名,但是引數個數或型別不同。

(3)函式隱藏:既不是過載也不是重寫,例如:函式名及引數完全相同卻又不是虛函式,卻在子類中重新實現該函式,也就是所謂的隱藏。

2、重寫/覆蓋

(1)重寫是指派生類函式覆蓋基類函式。

(2)重寫的特徵:

①不同的作用域(分別位於派生類與基類);

②函式名字相同;

③引數相同;

④基類函式必須是虛函式;

⑤重寫函式必須和原函式具有相同的返回型別;

⑥const可能會使虛成員函式的重寫失效。

(3)函式重寫例子

#include 

using

namespace

std;

class a

virtual

int getvalue()

};class b:public a

};void f(a *p)

int main()

執行結果:3、函式隱藏

(1)隱藏,是指派生類的函式遮蔽遮蔽了與其同名的基類函式。

(2)特徵:

①如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式都將被隱藏。(注意與過載區分)

②如果派生類的函式與基類的函式同名,且引數也相同,但是基類函式沒有virtual關鍵字。此時,基類的函式被隱藏。(注意與覆蓋區分)

(3)函式隱藏例子:

//派生類將隱藏基類的方法

#include

using

namespace

std;

class base

void h(float x)

};class derived : public base

void h(float x)

};int main(void)

執行結果:

4、成員函式被過載的特徵

(1)相同的作用域(同乙個類中);

(2)函式名字相同;

(3)引數不同;

(4)virtual關鍵字可有可無。

#include 

using

namespace

std;

int add(int,int);

double add(double,double);

int add(int x, int y)

double add(double x, double y)

int main(void)

執行結果:

C 函式的過載 重寫 隱藏

過載 1 在同一作用域中。2 函式名相同 引數個數或引數型別不同。3 過載又稱為靜態多型,靜態繫結,靜態決議等。因為要實現過載,所以c 和c的命名方式有所不同。過載主要是為了減輕程式設計師對函式名的記憶負擔,讓所有功能相似的函式使用同一名字。4 任何程式都僅有乙個 main 函式的例項。main 函...

C 的過載 重寫 隱藏

在同乙個class中 class demo 在同一訪問區內 如在同一.c cpp檔案內 即不在struct或者class中 4個fun都是過載函式 intfun int a void fun double a int fun int a,int b int fun float a 父類 class ...

過載 重寫 隱藏

共同點 函式名相同 定義 1 如果在類裡函式名相同但是形參不同,則為過載。形參不同包括形參的型別個數以及順序。2 類間。重寫和隱藏都發生在基類和派生類之間。重寫 覆蓋 發生在派生類和基類之間。必須滿足兩個條件 1 基類有virtual宣告 2 函式名和形參必須完全相同。隱藏 發生在派生類和基類之間,...