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

2021-08-15 20:01:59 字數 1279 閱讀 2456

原文:

參考部落格:

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

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

重定義:也叫做隱藏,

子類重新定義父類中有相同名稱的

非虛函式

( 引數列表可以不同 ) ,

指派生類的函式遮蔽了與其同名的基類函式。發生在繼承中。

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

繼承關係

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

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

重寫需要注意:

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

必須是virtual的

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

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

重定義規則如下:

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

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

[cpp] 

view plain

copy

#include

using

namespace

std;  

class

animal  

void

func1(

char

*s)//函式的過載

virtual

void

func2(

inttmp)  

void

func3(

inttmp)  

};  

class

fish:

public

animal  

void

func2(

char

*s)//函式的重寫

};  

intmain()    

執行結果如下:

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

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

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

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

過載 重寫 重定義區別

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