我有一個關於一元運算符重載的問題。代碼如下:是否所有的操作符重載都會將操作符放到超載被調用的對象之後?
class Fraction {
public:
Fraction() {}
Fraction(int a);
Fraction(int n, int d, int reduce=1);
Fraction operator +(const Fraction& y) const;
Fraction operator -(const Fraction& y) const;
Fraction operator -() const; // unary negation
// etc.
};
爲一元運算符-
,代碼如下:
Fraction Fraction::operator -() const { return (Fraction(-num, denom, 0)); }
Suppse我們有三個Fraction
對象,f1
,f2
和f3
。 我知道下面的代碼:
f3=f1+f2
等於f3=f1.operator+(f2)
,即在運營商面前的對象將調用操作員和一個後面將作爲參數傳遞,對不對?
然後,對於一元運算符-
,代碼
f3=-f1
上述用於操作者+
,我認爲代碼應該像f3=f1-
,其等於f3=f1.operator-()
思想如下。爲什麼實際的代碼是f3=-f1
而不是f3=f1-
?我認爲操作員面前的對象應該叫它......我知道在數學中它是f3=-f1
,但編譯器如何識別代碼f3=-f1
實際上是f1
調用操作符?它怎麼知道在這種情況下,-
是一個一元運算符?
非常感謝!
因爲語言(和數學)就是這樣。 – deviantfan 2014-09-30 22:12:58
@deviantfan,那麼編譯器如何識別? – 2014-09-30 22:13:57
編譯器只看到一個只有右側操作數的'-',所以它知道使用一元版本。 – Adam 2014-09-30 22:15:35