搜尋

首頁  >  問答  >  主體

c++ - 为什么叫做操作符重载?

如题,按重载的定义,应该具有相同的函数名才行啊,为什么是叫操作符重载,而不是操作符重写?

PHPzPHPz2767 天前641

全部回覆(5)我來回復

  • PHPz

    PHPz2017-04-17 11:46:05

    先來先明確一下重載和重寫的差別:

    1.重載(overload)一般是指同一個作用域裡,兩個不同的函數用了同一個名字,但是它們必須具有不同的參數列表,例如參數類型不同,或者參個數不同。

    2.重寫(override)是指在子類別中重新實作基底類別中的虛擬函數(記住,一定要是虛擬函數!如果子類別中重現實現的是基底類別中的非虛函數,就應該叫做「隱藏(hide)」了!

    現在來對號入座吧:假設你重載操作符“+”,其實你重載的函數名就是“+”,與原有(內建)的“+”具有相同的函數名稱。但是你重載的「+」和原有的「+」應該要有不同的參數清單(否則你就沒必要重載了)。事實上,c++要求在重載運算子時,必須確保至少有一個參數是你的自訂的類別類型,如果你這麼重載

    int operator+(int a, int b);
    

    編譯器就會報錯。你會發現,整個過程中好像跟虛函數沒什麼關係。所以,運算子重載只能叫“重載”,不能叫“重寫”。

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 11:46:05

    你把操作符看成函數,其實它就是一種函數,個人見解

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 11:46:05

    操作符重載整體就是一個概念,為什麼你一定要拆開來看?

    回覆
    0
  • 迷茫

    迷茫2017-04-17 11:46:05

    對應原文:

    override:函數覆寫(重寫太容易誤解了)
    overload:重載
    operator overload:運算子重載

    不叫覆寫的原因,是因為這個特質跟繼承關係無關。而重載更偏重其擴展性質。

    回覆
    0
  • 阿神

    阿神2017-04-17 11:46:05

    類似函數重載啊。 。 。

    回覆
    0
  • 取消回覆