C 中,過載 覆蓋和隱藏的區別?

2021-07-11 00:09:15 字數 622 閱讀 5769

函式的過載是指在c++的某乙個類中允許有多個同名的成員函式存在,但是同名的各個函式的形參必須有區別:

a. 形參的個數不同;

b. 形參的個數相同,但是形參的型別不同。

覆蓋(override)是指在派生類中存在重新定義的函式,其函式名、引數列、返回值型別必須同基類(父類)中的相對應被覆蓋的函式嚴格一致,覆蓋函式和被覆蓋函式只有函式體(花括號的部分)不同,當派生子類物件呼叫子類中該同名函式時會自動呼叫派生類中的覆蓋版本,而不是父類中的被覆蓋的函式版本,這種機制我們叫做覆蓋。

下面我們從成員函式的角度來講述函式過載和覆蓋的區別。

成員函式被過載的特徵有:

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

2)函式名字相同;

3)引數不同;

4)virtual 關鍵字可有可無。

覆蓋的特徵有:

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

2)函式名字相同;

3)引數數目、型別嚴格一致;

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

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

1)如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式將被隱藏(注意別於過載混淆)。

c 中過載 隱藏和覆蓋的區別

過載分為普通函式過載 運算子過載和型別過載,在這裡我們只介紹普通函式過載,包括全域性作用域下的函式過載和類作用域下的函式過載。1 函式名相同 2 引數列表相同 包括引數個數 引數型別和引數順序 3 屬於同一作用域 必須是在同乙個類中的成員函式或者均為全域性函式,即基類和派生類中的同名函式不可能構成過...

C 中過載 覆蓋 隱藏的區別

過載 過載特性 1 相同的範圍 2 函式名字相同 3 引數不同 4 virtual關鍵字可有可無 class a public void func int a,int b void func int a 這就是對函式進行了過載。注 對於全域性函式也是可以過載的,第乙個條件中只要範圍相同就可以。覆蓋 ...

C 過載 覆蓋和隱藏的區別

1 過載 覆蓋和隱藏的概念 覆蓋 覆蓋指的是派生類的虛函式覆蓋了基類的同名且引數相同的函式。過載 必須在乙個域中,函式名稱相同但是函式引數不同,過載的作用就是同乙個函式有不同的行為,因此不是在乙個域中的函式是無法構成過載的,這是過載的重要特徵。隱藏 是派生類的成員函式隱藏了基類函式的成員函式,在呼叫...