如果這是一個非成員函數,包括類的朋友 - 爲什麼重載一元運算符不工作?使用朋友超載一元運算符
MyClass operator++(MyClass myClass) {
myClass.x++;
return myClass;
}
傳遞對象放在堆棧上的答案是?
爲什麼我需要使用對象的引用?
MyClass &myClass
如果這是一個非成員函數,包括類的朋友 - 爲什麼重載一元運算符不工作?使用朋友超載一元運算符
MyClass operator++(MyClass myClass) {
myClass.x++;
return myClass;
}
傳遞對象放在堆棧上的答案是?
爲什麼我需要使用對象的引用?
MyClass &myClass
通常,operator++
預計會通過增加對象來修改對象。它可以做到這一點,如果它在該對象上操作(一個成員函數)或獲取對該對象的引用(一個自由函數傳遞一個引用)。但是,它怎麼可能只用該對象的副本修改一個對象呢?
您正在發送對象值它將創建原始對象的副本並將對其進行修改;對原始物體沒有影響。
您需要通過參考發送您的對象,以防止複製,並且在該功能中完成的任何更改都會修改原始對象而不是其副本。 Try:
MyClass operator++(MyClass & myClass) {
...
}
//now myClass will become nickname(another name) of your original object
這會編譯並執行某些操作,而不是通常的預增加操作符。你應該返回一個參考。 – juanchopanza
你有什麼具體問題需要解決嗎?如果是這樣,請發佈更多詳細信息。 – moooeeeep
定義「不工作」。它有效,但可能不符合你的預期。 – interjay
[運算符重載]的可能重複(http://stackoverflow.com/questions/4421706/operator-overloading) – juanchopanza