c++重載前置++和--


C語言中,前置和后置++,--都不能作為左值,而在c++中,前置的++和--可以作為左值,從下面的重載運算符中也可以看出,它們返回的是引用,我不知道為什么這里和c語言中不同,但c++類似的提升還有三目運算符?:,在c中也不可以做左值,但c++中可以。或者是因為c++提出了引用,進而對c做了一定的提升吧。

重載前置++和--,分別采用成員函數和全局函數的方式實現,代碼如下:重載運算符的行為應該和內置類型一致,所以前置的++、--應該返回引用。

 1 #include<iostream>
 2 using namespace std;  3 class Test {  4     friend Test & operator--(Test &obj);  5 public:  6     Test(int a = 0, int b = 0)  7  {  8         this->a = a;  9         this->b = b; 10  } 11     void display() 12  { 13         cout << "a:" << a << " b:" << b << endl; 14  } 15 public: 16     Test & operator++() 17  { 18         this->a++; 19         this->b++; 20         return *this; 21  } 22 private: 23     int a; 24     int b; 25 }; 26 Test & operator--(Test &obj) 27 { 28     obj.a--; 29     obj.b--; 30     return obj; 31 } 32 int main() 33 { 34     Test t1(1, 2); 35  t1.display(); 36     ++t1; 37  t1.display(); 38     --t1; 39  t1.display(); 40     cout << "hello world!\n"; 41     return 0; 42 }

recommend:

1.賦值(=)、下標([])、調用和成員訪問箭頭(->)運算符必須是成員函數;

2.復合賦值運算符一般來說應該是成員,但並非必須,這一點與賦值運算符略有不同;

3.改變對象狀態的運算符或者與給定類型密切相關的運算符,如遞增、遞減和解引用運算符,通常應該是成員(上述代碼只是為了復習訓練一下全局函數和成員的分別實現,所以沒有遵循這條規則);

4.具有對稱性的運算符可能轉換任一端的運算對象,例如算術、相等性、關系和位運算符等,因此它們通常應該是普通的非成員函數。

 總結下來就是,只用記住第四點,其他情況都用成員函數的方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM