C 過載 重寫和重定義的區別

2021-07-02 07:41:59 字數 1094 閱讀 3392

參考部落格:

相信看到這個標題頭就暈了,其實將他們彼此放到一起來看,就會比較清晰辨認了。

過載:函式名相同,函式的引數個數、引數型別或引數順序三者中必須至少有一種不同。函式返回值的型別可以相同,也可以不相同。發生在乙個類內部,不能跨作用域。

重定義:也叫做隱藏,子類重新定義父類中有相同名稱的非虛函式

( 引數列表可以不同 ) ,

指派生類的函式遮蔽了與其同名的基類函式。可以理解成發生在繼承中的過載。

重寫:也叫做覆蓋,一般發生在子類和父類

繼承關係之間。子類重新定義父類中有相同名稱和引數的虛函式。(override)

如果乙個派生類,存在重定義的函式,那麼,這個類將會隱藏其父類的方法,除非你在呼叫的時候,強制轉換為父類型別,才能呼叫到父類方法。否則試圖對子類和父類做類似過載的呼叫是不能成功的。 

重寫需要注意:

1、 被重寫的函式不能是static的。必須是virtual的

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

3 、重寫函式的訪問修飾符可以不同。

重定義規則如下:

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

b 、如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有vitual關鍵字,此時,基類的函式被隱藏(如果相同有virtual就是重寫覆蓋了)。

#includeusing namespace std;

class animal

void func1(const char *s)//函式的過載

virtual void func2(int tmp)

void func3(int tmp)

};class fish :public animal

void func2(int tmp) //函式的重寫, 覆蓋父類的方法 override

void func3(int tmp)

};int main()

執行結果如下:

C 過載 重寫和重定義的區別

相信看到這個標題頭就暈了,其實將他們彼此放到一起來看,就會比較清晰辨認了。過載 函式名相同,函式的引數個數 引數型別或引數順序三者中必須至少有一種不同。函式返回值的型別可以相同,也可以不相同。發生在乙個類內部。重定義 也叫做隱藏,子類重新定義父類中有相同名稱的 非虛函式 引數列表可以不同 指派生類的...

C 過載 重寫和重定義的區別

原文 參考部落格 相信看到這個標題頭就暈了,其實將他們彼此放到一起來看,就會比較清晰辨認了。過載 函式名相同,函式的引數個數 引數型別或引數順序三者中必須至少有一種不同。函式返回值的型別可以相同,也可以不相同。發生在乙個類內部。重定義 也叫做隱藏,子類重新定義父類中有相同名稱的 非虛函式 引數列表可...

過載 重寫 重定義區別

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