相信看到這個標題頭就暈了,其實將他們彼此放到一起來看,就會比較清晰辨認了。
過載:函式名相同,函式的引數個數、引數型別或引數順序三者中必須至少有一種不同。函式返回值的型別可以相同,也可以不相同。發生在乙個類內部。
重定義:也叫做隱藏,
子類重新定義父類中有相同名稱的
非虛函式
( 引數列表可以不同 ) ,
指派生類的函式遮蔽了與其同名的基類函式。發生在繼承中。
重寫:也叫做覆蓋,一般發生在子類和父類
繼承關係
之間。子類重新定義父類中有相同名稱和引數的虛函式。
如果乙個類,存在和父類相同的函式,那麼,這個類將會覆蓋其父類的方法,除非你在呼叫的時候,強制轉換為父類型別,否則試圖對子類和父類做類似過載的呼叫是不能成功的。
重寫需要注意:
1、 被重寫的函式不能是static的。
必須是virtual的
2 、重寫函式必須有相同的型別,名稱和引數列表
3 、重寫函式的訪問修飾符可以不同。儘管virtual是private的,派生類中重寫改寫為public,protected也是可以的
重定義規則如下:
a 、如果派生類的函式和基類的函式同名,但是引數不同,此時,不管有無virtual,基類的函式被隱藏。
b 、如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有vitual關鍵字,此時,基類的函式被隱藏(如果相同有virtual就是重寫覆蓋了)。
#include
using
namespace std;
class animal
void func1(char *s)//函式的過載
virtual
void func2(int tmp)
void func3(int tmp)
};
class fish:public animal
void func2(char *s)//函式的
重寫
};
int main()
C 過載 重寫和重定義的區別
參考部落格 相信看到這個標題頭就暈了,其實將他們彼此放到一起來看,就會比較清晰辨認了。過載 函式名相同,函式的引數個數 引數型別或引數順序三者中必須至少有一種不同。函式返回值的型別可以相同,也可以不相同。發生在乙個類內部,不能跨作用域。重定義 也叫做隱藏,子類重新定義父類中有相同名稱的非虛函式 引數...
C 過載 重寫和重定義的區別
原文 參考部落格 相信看到這個標題頭就暈了,其實將他們彼此放到一起來看,就會比較清晰辨認了。過載 函式名相同,函式的引數個數 引數型別或引數順序三者中必須至少有一種不同。函式返回值的型別可以相同,也可以不相同。發生在乙個類內部。重定義 也叫做隱藏,子類重新定義父類中有相同名稱的 非虛函式 引數列表可...
過載 重寫 重定義區別
過載 函式名相同,函式的引數個數 引數型別或引數順序三者中必須至少有一種不同。函式返回值的型別可以相同,也可以不相同。發生在乙個類內部。重定義 也叫做隱藏,子類重新定義父類中有相同名稱的非虛函式 引數列表可以不同 指派生類的函式遮蔽了與其同名的基類函式。可以理解成發生在繼承中的過載。重寫 也叫做覆蓋...