C 繼承中過載 重寫 重定義的區別

2021-09-24 14:21:17 字數 1087 閱讀 5280

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

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

重寫需要注意:

(1)被重寫的函式不能是static的且必須是virtual的。

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

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

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

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

class base
綜上所述,總結如下:

成員函式過載,特徵是:

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

(2)函式名字相同

(3)引數不同

(4)virtual關鍵字可有可無

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

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

(2)函式的名字相同

(3)引數相同

(4)基類函式必須有virtual關鍵字

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

(1)如果派生類的函式和基類的函式同名,但是引數不同,此時virtual可有可無,基類的函式被隱藏。(假過載,不同範圍)

(2)如果派生類的函式與基類的函式同名,並且引數也相同,且基類函式沒有vitual關鍵字,基類的函式被隱藏。(假重寫,無virtual)

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

class a

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

}//等同於:

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

}

C 中過載 重寫 重定義區別

重寫 過載 重定義區別 1 成員函式過載特徵 a 相同的範圍 在同乙個類中 b 函式名字相同 c 引數不同 dvirtual關鍵字可有可無 2 重寫 覆蓋 是指派生類函式覆蓋基類函式,特徵是 a 不同的範圍,分別位於基類和派生類中 b 函式的名字相同 c 引數相同 d 基類函式必須有virtual關...

過載 重寫 重定義區別

過載 函式名相同,函式的引數個數 引數型別或引數順序三者中必須至少有一種不同。函式返回值的型別可以相同,也可以不相同。發生在乙個類內部。重定義 也叫做隱藏,子類重新定義父類中有相同名稱的非虛函式 引數列表可以不同 指派生類的函式遮蔽了與其同名的基類函式。可以理解成發生在繼承中的過載。重寫 也叫做覆蓋...

C 過載 重寫 重定義的區別

本文是學習過載 重寫 重定義的學習筆記。過載 overload 類中同名函式,通過引數不同,實現不同的功,返回值不同不能作為過載區別。重寫 override 子類重寫父類的虛函式,父類函式必須是virtual說明的,不能是static的,是c 實現多型的方式,讓父類能呼叫子類的方法。重定義 rede...