C 過載與重寫

2021-06-23 02:08:16 字數 2073 閱讀 2527

過載overload:是函式名相同,引數列表不同 過載只是在類的內部存在。

但是不能靠返回型別來判斷。

重寫override:也叫做覆蓋。

子類重新定義父類中有相同名稱和引數的虛函式。

函式特徵相同。但是具體實現不同,主要是在繼承關係中出現的 。

重寫需要注意:

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

必須是virtual的

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

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

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

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

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

class base

void f1(string a) ;

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關鍵字,此時,基類的函式被隱藏。

1.重寫 (override):

父類與子類之間的多型性。子類重新定義父類中有相同名稱和引數的虛函式。

1) 被重寫的函式不能是 static 的。必須是 virtual 的,或者是 override 的 ( 即函式在最原始的基類中被宣告為 virtual , c++ 中沒有 override) 。

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

3) 重寫函式的訪問修飾符可以不同。儘管 virtual 是 private 的,派生類中重寫改寫為 public,protected 也是可以的 ( 這點與 c# 完全不同 )

2. 過載 (overload):

指函式名相同,但是它的參數列列個數或順序,型別不同。但是不能靠返回型別來判斷。

3. 重定義 (redefining):

子類重新定義父類中有相同名稱的非虛函式 ( 引數列表可以不同 ) 。//這裡原文作者好像寫錯了

重定義後子類呼叫的函式是子類自己的函式,父類的函式會被隱藏。名字隱藏特性。如果想呼叫父類的該同名函式,需要用父類加上作用域來指定呼叫的函式。

過載與覆蓋的區別

1、方法的覆蓋是子類和父類之間的關係,是垂直關係;方法的過載是同乙個類中方法之間的關係,是水平關係。

2、覆蓋要求引數列表相同;過載要求引數列表不同。

3、覆蓋關係中,呼叫那個方法體,是根據物件的型別(物件對應儲存空間型別)來決定;過載關係,是根據呼叫時的實參表與形參表來選擇方法體的。

C 重寫與過載

過載是方法名要一樣,但是引數型別和個數不一樣,返回值型別可以相同也可以不相同。無法以返回型作為過載函式的區分標準。過載overloading是乙個類中多型性的一種表現。重寫要求方法名 引數和返回值相同。重寫是為了增強類的重用性和復用性 擴充套件性 重寫是對類中方法的擴充,因為繼承用的是父類的東西,重...

C 的過載與重寫

1 過載 overload 在同乙個作用域 一般指乙個類 的兩個或多個方法函式名相同,引數列表不同的方法叫做過載,它們有三個特點 俗稱兩必須一可以 方法名必須相同 引數列表必須不相同 返回值型別可以不相同 例如 public void sleep public intsleep int time 點...

C 的過載與重寫

1 過載 overload 在同乙個作用域 一般指乙個類 的兩個或多個方法函式名相同,引數列表不同的方法叫做過載,它們有三個特點 俗稱兩必須一可以 方法名必須相同 引數列表必須不相同 返回值型別可以不相同 例如 public void sleep public intsleep int time 點...