C 過載 覆蓋 隱藏

2021-07-30 18:58:30 字數 1716 閱讀 4479

一,過載(overload)的定義

在同一可訪問區內被聲名的幾個具有不同引數列表的(引數的型別、個數、順序不同)同名函式,編譯器會根據不同的引數列表來確定具體呼叫哪個函式,這種機制叫過載。過載不關心函式的返回值型別。但是,只有返回值相同的同名函式,才有可能構成過載關係。

二,函式過載(overload)注意的問題

1,在使用過載時只能通過不同的引數樣式。例如,不同的引數型別,不同的引數個數,不同的引數順序。

2,不能通過訪問許可權、返回型別進行過載。

三,覆蓋(override)的定義

覆蓋是指派生類中存在重新定義的函式,其函式名、引數列、返回值型別必須同父類中的相對應被覆蓋的函式嚴格一致,覆蓋函式和被覆蓋函式只有函式體(花括號中的部分)不同,覆蓋是乙個類的多型性的體現。

四,覆蓋(override)

注意的問題

1,覆蓋的方法的特徵標必須要和被覆蓋的方法的特徵標完全匹配,才能達到覆蓋的效果。

2,覆蓋的方法的返回值必須和被覆蓋的方法的返回一致。

3,被覆蓋的方法不能為private,否則在其子類中只是新定義了乙個方法,並沒有對其進行覆蓋。

4,基類的函式名前必須有virtual關鍵字,如果沒有virtual關鍵字,那就是隱藏。

五,隱藏的定義

隱藏是指派生

類的函式遮蔽了與其同名的基類函式。

六,隱藏應注意的問題

1,如果派生類的函式與基類的函式同名但是

引數不同

。此時,不論有無virtual關鍵字,基類的函式將被隱藏。

#includeusing namespace std;

class base{

public:

virtual void f1(int x, double y){

cout<<"virtual void f1(int x, double y)"《上面的**在編譯時會出錯,因為派生類的名為f1的函式,會遮蔽從基類繼承過來的名為void  f1()的非虛函式,也會遮蔽從基類繼承過來的名為virtual  void  f1(int  x,  int  y)的虛函式,遮蔽了的這些函式對派生類物件來說都是不可見的,因此派生類的物件直接呼叫f1()會出錯。

2,如果派生類的函式與基類的函式同名,並且引數也相同但是基類函式沒有virtual關鍵字。此時,基類的函式被隱藏。

七,例項**

1,**例項

#includeusing namespace std;

class base{

public:

void f1(){

cout<<"void f1()"<

2,**分析

上面的函式在編譯時會出錯,因為在derived類中宣告的f1函式,遮蔽了從基類繼承過來的同名函式,也就是說基類的void  f1()與void  f1(int  x)函式對drived物件來說是不可見的,因此當derived物件呼叫void  f1(int   x)函式時會報錯。

c 過載 覆蓋 隱藏

成員函式的過載 覆蓋與隱藏 成員函式的過載 覆蓋 override 與隱藏很容易混淆,c 程式設計師必須要搞清楚 概念,否則錯誤將防不勝防。8.2.1 過載與覆蓋 成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。覆蓋是指派生類函...

c 過載 覆蓋 隱藏

成員函式的過載 覆蓋與隱藏 成員函式的過載 覆蓋 override 與隱藏很容易混淆,c 程式設計師必須要搞清楚 概念,否則錯誤將防不勝防。8.2.1 過載與覆蓋 成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。覆蓋是指派生類函...

c 過載 覆蓋 隱藏

成員函式的過載 覆蓋與隱藏 成員函式的過載 覆蓋 override 與隱藏很容易混淆,c 程式設計師必須要搞清楚概念,否則錯誤將防不勝防。成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。覆蓋是指派生類函式覆蓋基類函式,特徵是 1...