C++重載運算符如何確定運算符位置?
01-03
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 平台)中不流行呢?