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 函式名和形參必須完全相同。隱藏 發生在派生類和基類之間,...