C++ 操作员+;过载错误。无法返回对对象的引用
这是一节课:C++ 操作员+;过载错误。无法返回对对象的引用,c++,oop,reference,operator-overloading,C++,Oop,Reference,Operator Overloading,这是一节课: class MyClass { private: double value; public: MyClass() { this->value = 0; } MyClass(double value) { this->value = value; } MyClass& operator + (MyClass & outerObj); }; 为什么超负荷工作
class MyClass
{
private:
double value;
public:
MyClass()
{
this->value = 0;
}
MyClass(double value)
{
this->value = value;
}
MyClass& operator + (MyClass & outerObj);
};
为什么超负荷工作:
MyClass& MyClass::operator + (MyClass & outerObj)
{
MyClass retObject(this->value + outerObj.value);
return retObject;
}
但是这个不是吗
MyClass& MyClass::operator + (MyClass & outerObj)
{
return MyClass(this->value + outerObj.value);
}
VC++发出警告:
MyClass::MyClass(双值)
+3过载
非常量引用的初始值必须是左值
我不明白是什么问题。毕竟,它返回的内容基本相同。第一个代码段的问题是,您试图返回一个绑定到本地对象的引用。当退出函数时,局部变量将被销毁,然后返回的引用总是挂起 第二个代码段的问题是,您试图将一个临时对象绑定到非常量的左值引用,这是一个格式错误的对象 您应该将
操作符+
从按引用返回改为按值返回,这将使返回的本地对象或临时对象都能正常工作,并避免上述问题。e、 g
MyClass MyClass::operator + (const MyClass & outerObj) const {
...
}
通常,将
运算符+()
本身设置为常量也是一个好主意。i、 e.MyClass MyClass::operator+(常量MyClass和outerObj)常量
。表达式a+b
能够修改a
很少是个好主意。