2014-04-29 44 views
-2

如果這是一個非成員函數,包括類的朋友 - 爲什麼重載一元運算符不工作?使用朋友超載一元運算符

MyClass operator++(MyClass myClass) { 
    myClass.x++; 
    return myClass; 
} 

傳遞對象放在堆棧上的答案是?

爲什麼我需要使用對象的引用?

MyClass &myClass 
+0

你有什麼具體問題需要解決嗎?如果是這樣,請發佈更多詳細信息。 – moooeeeep

+2

定義「不工作」。它有效,但可能不符合你的預期。 – interjay

+0

[運算符重載]的可能重複(http://stackoverflow.com/questions/4421706/operator-overloading) – juanchopanza

回答

0

通常,operator++預計會通過增加對象來修改對象。它可以做到這一點,如果它在該對象上操作(一個成員函數)或獲取對該對象的引用(一個自由函數傳遞一個引用)。但是,它怎麼可能只用該對象的副本修改一個對象呢?

1

您正在發送對象它將創建原始對象的副本並將對其進行修改;對原始物體沒有影響。

您需要通過參考發送您的對象,以防止複製,並且在該功能中完成的任何更改都會修改原始對象而不是其副本。 Try:

MyClass operator++(MyClass & myClass) { 
    ... 
} 

//now myClass will become nickname(another name) of your original object 
+1

這會編譯並執行某些操作,而不是通常的預增加操作符。你應該返回一個參考。 – juanchopanza