C 中的函式過載 重寫 重定義

2021-08-20 10:16:21 字數 1450 閱讀 6584

過載overload:是函式名相同,引數列表不同 過載只是在類的內部存在。但是不能靠返回型別來判斷。

重寫override:也叫做覆蓋。子類重新定義父類中有相同名稱和引數的虛函式。函式特徵相同。但是具體實現不同,主要是在繼承關係中出現的 。

重寫需要注意:

1 被重寫的函式不能是static的。

必須是virtual的

2 重寫函式必須有相同的型別,名稱和引數列表

3 重寫函式的訪問修飾符可以不同。儘管virtual是private的,派生類中重寫改寫為public,protected也是可以的

重定義 (redefining)也叫做隱藏:

子類重新定義父類中有相同名稱的非虛函式( 引數列表可以不同 ) 。

如果乙個類,存在和父類相同的函式,那麼,這個類將會覆蓋其父類的方法,除非你在呼叫的時候,強制轉換為父類型別,否則試圖對子類和父類做類似過載的呼叫是不能成功的。

class base ;

class derivea:public base;

class deriveb:public base

;int main()

執行結果:

綜上所述,總結如下:

1 成員函式過載特徵:

a 相同的範圍(在同乙個類中)

b 函式名字相同

c 引數不同

d virtual關鍵字可有可無

2 重寫(覆蓋)是指派生類函式覆蓋基類函式,特徵是:

a 不同的範圍,分別位於基類和派生類中

b 函式的名字相同

c 引數相同

d 基類函式必須有virtual關鍵字

3 重定義(隱藏)是指派生類的函式遮蔽了與其同名的基類函式,規則如下:

a 如果派生類的函式和基類的函式同名,但是引數不同,此時,不管有無virtual,基類的函式被隱藏。

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

注意區分虛函式中的過載和重寫:

class a

};class b:public a //這是過載而不是重寫:

}
class b:public a // 新的fun, 和前面的只是名字一樣的過載函式

, 不是虛函式

}

C 函式重定義 過載 重寫

c 的重寫,過載,重定義 1.重寫 override 又稱覆蓋 父類與子類之間的多型性。子類重新定義父類中有相同名稱和引數的虛函式。1 被重寫的函式不能是 static 的。必須是 virtual 的,或者是 override 的 即函式在最原始的基類中被宣告為 virtual c 中沒有 over...

C 函式過載 重寫 重定義

c 中經常會提到過載,除了過載,還有重寫,重定義,下面對這三個概念逐一進行區分 1 過載 函式過載是同一定義域中 即同乙個類中 的同名函式,但形參的個數必須不同,包括引數個數,型別和順序,不能僅通過返回值型別的不同來過載函式 include using namespace std class box...

C 中過載 重寫 重定義

過載 1 作用域相同。2 函式名相同,引數列表不同。3 與返回值無關。例 同乙個類的建構函式和拷貝建構函式構成過載。class a a const a a 重寫 覆蓋 1 不在同一作用域 分別為基類和派生類 2 函式名相同,引數列表相同,返回值相同。3 基類成員函式必須有virtual關鍵字修飾。4...