2014-11-24 34 views
-1

我是C++新手,我有一些問題。我看到operator ++超載在複雜的號碼,我無法理解:++ operator overload C++含義

  1. 爲什麼我創建了一個tmp變量
  2. 爲什麼我的第一家運營商是Complex &和第二它只是Complex
  3. 爲什麼返回*本;(我知道原因的Complex&偏偏)
  4. ,如果我使用複雜而不&發生了什麼會嗎?(我運行它和它相同的結果)

別看評論這是希臘:)

Complex & Complex::operator ++(){ 
    r=r+1; 
    return *this;//to this einai to pointer tou trexontos alla 8eloume dereference ara vazoume *this gia na epistrepsoume refernce// 
} 

Complex  Complex::operator ++(int){ 
    Complex tmp(*this); 
    operator ++(); 
     return tmp;//ftiaxnoume ena tmp tou antikimenou pou exoume meta efarmozoume to operator++ kai epistrefoume to tmp// 
} 
+0

請參閱http://stackoverflow.com/a/4445969/78845,瞭解C++中的前後增量運算符的解釋。 – Johnsyweb 2014-11-24 22:51:40

+0

[Post-increment和Pre-increment概念?]可能的重複(http://stackoverflow.com/questions/4445706/post-increment-and-pre-increment-concept) – Johnsyweb 2014-11-24 23:00:08

回答

1

不同的簽名(複雜& vs Complex)是因爲這些操作i ++和++我做了不同的事情。一個按值返回一箇舊值(第二個)的副本,第一個返回對實際值的引用,如果x - 通過引用

tmp變量是必需的,因爲您需要在遞增後返回舊值值(這就是x ++所做的)

您需要返回對當前對象的引用 - 所以返回* this - 這是一個指向當前對象的指針; *這是對象

+0

如果我使用複雜而沒有&什麼是發生了什麼? – user3135218 2014-11-24 23:15:01

+0

爲什麼不找出 – pm100 2014-11-25 00:23:03

0

隨着變量x,你可以寫++xx++。前者將執行++,如果它是更大表達式的一部分,則使用新的x。後者也會執行++,但使用舊的x作爲當前表達式(它就像++在當前表達式之後出現一行)。

如果您重載++,您需要分開,如果它是前綴或後綴。
它看起來有點奇怪,但如果你的意思是後綴版本,你需要有一個無名的int作爲函數的參數(前綴無)。沒有意義的價值通過什麼,
它只是爲了使這兩種可能性有所不同。

所以,在後綴變型,you'll有一個臨時副本,以保持
舊的價值,同時you're做++(螞蟻返回舊值此一次)。

1

2 - Complex &返回對同一對象的引用,Complex返回它的副本。

1 - 這就是爲什麼會創建一個臨時變量,以便增加實際對象但返回副本,以便模擬「使用然後遞增」後綴操作符。

3 - 因爲而i++返回i副本(和增量i),++i返回i遞增。

4 - 操作員將返回遞增對象的副本,而不是實際遞增的對象。

+0

如果我使用複雜沒有&會發生什麼? – user3135218 2014-11-24 23:21:44

+2

@ user3135218 - 在這種特殊情況下沒有什麼不好。 ++運算符將返回遞增對象的副本,而不是遞增對象。但是當你做運算符重載時,你應該遵循正確的約定來返回類型和參數。 – dtech 2014-11-24 23:30:42