使用朋友重载一元运算符

时间:2014-04-29 11:43:12

标签: c++ operator-overloading friend

如果这是一个非成员函数,包括该类的朋友 - 为什么重载一元运算符不起作用?

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

传递的对象放在堆栈上的答案是什么?

为什么我需要使用对象的引用?

MyClass &myClass

2 个答案:

答案 0 :(得分:1)

您正在通过发送对象,该对象将创建原始对象的副本并对其进行修改;对原始物体没有影响。

您需要通过引用发送您的对象,以便它无法复制,并且在该函数中进行的任何更改都将修改您的原始对象而不是其副本。 尝试:

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

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

答案 1 :(得分:0)

通常,operator++应该通过递增来修改对象。如果它对该对象(成员函数)进行操作或获取对该对象的引用(自由函数传递引用),则可以这样做。但它怎么可能只用那个对象的副本修改一个对象呢?