C++重載運算符如何確定運算符位置?

Rational r1(2,5),r2(2,10); //r1=2/5=0.4 r2=2/10=0.2

cout&<&//Rational中重載了+ , double , &<&<

//重載+的時候是 Rational Rational::operator+(secondRational){調用add();返回結果;}

//現在我又遇到一種重載,在r1前面加上+或-,為正負的r1

//書中例子Rational Rational::operator+(){返回*this;}

============================================================

當重載為 加號 的時候,傳入了另一個對象,返回結果

當重載為 正 的時候 ,沒傳入對象,返回原值

重載符號為加號的時候,我調試發現傳入參數是r2,進入的是r1,此時重載符號在r1後面。

重載符號為正的時候,重載符號在r1前面.。。。。

============================================================

當重載++或者--的時候,如何確定重載符號的位置,進而決定重載返回值???


+ 可以表示兩種運算元:加法或正。

+a、a + b:這兩個 + 是不同的。

Struct const operator + (Struct const value);

Struct const operator + (Struct const v1, Struct const v2);

+a 等同於 operator + (a)

a + b 等同於 operator + (a, b)

++ 也可以表示兩種運算元:前置遞增或後置遞增。

Struct operator ++ (Struct );

Struct const operator ++ (Struct , int);

++a 等同於 operator ++ (a)

a++ 等同於 operator ++ (a, ???)

其中 ??? 是隨便一個 int

換成函數的形式之後,該調用哪個就是重載決議(overload resolution)的事情了。

如果你希望知道編譯器如何判斷同一個字元表示的哪個運算元,請修改問題。

————————————————————

更新 1:這些都是靜態成員函數(運算元)或者非成員函數(運算元),對於非靜態成員函數(運算元),第一個參數替換為 *this。


operator++()

operator ++(int)

operator--()

operator--(int)


推薦閱讀:

看了很多技術書,為啥仍然寫不出項目?
C++ 如何生成大隨機數?
C++ 如何寫一個函數,使得它的返回值是指向該函數自身的指針?
斷言、異常和返回值的選擇問題?
Qt 為什麼在桌面應用(Windows 平台)中不流行呢?

TAG:編程語言 | 編程 | C | CC |