如题,按重载的定义,应该具有相同的函数名才行啊,为什么是叫操作符重载,而不是操作符重写?
学习是最好的投资!
先來先明確一下重載和重寫的差別:
1.重載(overload)一般是指同一個作用域裡,兩個不同的函數用了同一個名字,但是它們必須具有不同的參數列表,例如參數類型不同,或者參個數不同。
2.重寫(override)是指在子類別中重新實作基底類別中的虛擬函數(記住,一定要是虛擬函數!如果子類別中重現實現的是基底類別中的非虛函數,就應該叫做「隱藏(hide)」了!
現在來對號入座吧:假設你重載操作符“+”,其實你重載的函數名就是“+”,與原有(內建)的“+”具有相同的函數名稱。但是你重載的「+」和原有的「+」應該要有不同的參數清單(否則你就沒必要重載了)。事實上,c++要求在重載運算子時,必須確保至少有一個參數是你的自訂的類別類型,如果你這麼重載
int operator+(int a, int b);
編譯器就會報錯。你會發現,整個過程中好像跟虛函數沒什麼關係。所以,運算子重載只能叫“重載”,不能叫“重寫”。
你把操作符看成函數,其實它就是一種函數,個人見解
操作符重載整體就是一個概念,為什麼你一定要拆開來看?
對應原文:
override:函數覆寫(重寫太容易誤解了) overload:重載 operator overload:運算子重載
不叫覆寫的原因,是因為這個特質跟繼承關係無關。而重載更偏重其擴展性質。
類似函數重載啊。 。 。
先來先明確一下重載和重寫的差別:
1.重載(overload)一般是指同一個作用域裡,兩個不同的函數用了同一個名字,但是它們必須具有不同的參數列表,例如參數類型不同,或者參個數不同。
2.重寫(override)是指在子類別中重新實作基底類別中的虛擬函數(記住,一定要是虛擬函數!如果子類別中重現實現的是基底類別中的非虛函數,就應該叫做「隱藏(hide)」了!
現在來對號入座吧:假設你重載操作符“+”,其實你重載的函數名就是“+”,與原有(內建)的“+”具有相同的函數名稱。但是你重載的「+」和原有的「+」應該要有不同的參數清單(否則你就沒必要重載了)。事實上,c++要求在重載運算子時,必須確保至少有一個參數是你的自訂的類別類型,如果你這麼重載
編譯器就會報錯。你會發現,整個過程中好像跟虛函數沒什麼關係。所以,運算子重載只能叫“重載”,不能叫“重寫”。
你把操作符看成函數,其實它就是一種函數,個人見解
操作符重載整體就是一個概念,為什麼你一定要拆開來看?
對應原文:
不叫覆寫的原因,是因為這個特質跟繼承關係無關。而重載更偏重其擴展性質。
類似函數重載啊。 。 。