我有一个包含整数数组的简单类。我想重载+将两个ararys合并在一起。我已经定义了两个重载器。 +和=
class Money{
Money & operator =( const Money &a )
{
for( int i = 0; i < size ;i++ ) arr[i] = a.arr[i];
return *this;
}
Money & operator +( const Mone &a )
{
Money temp;
for( int i = 0; i < size ;i++ ){
temp.arr[i] = arr[i] + a.arr[i];
}
return temp;
}
private:
int arr[50];
int size = 50;
}
问题是索引0,它从内存中返回随机数。我已经看到了关于similliar问题的一些问题,但是使用*运算符(我会尝试找到它并链接它),我得到了我的operator = from。是什么造成的?我正在调用它
Money a;
Money b;
Money d;
d = a + b;
// print array;
我是新手,因为我很难分析和理解这个概念。
答案 0 :(得分:2)
基本问题在这里,并没有与重载有任何关系:
Money & operator +( const Mone &a ) {
Money temp;
:
return temp;
问题在于您返回对局部变量的引用,该函数在函数返回时被销毁,因此是悬空引用,导致未定义的行为。
将其更改为按值返回Money
。
答案 1 :(得分:1)
我理解operator +中的问题,你正在创建一个临时变量temp。该变量将一直存在,直到“operator +”的代码完成。当您返回对该变量id est的引用时,本质上是一个隐藏的指针,当代码完成时,该引用不再有效。如果你改变代码并按值返回,一切都应该正常工作。相反,对于=运算符,事情正常工作,因为您返回的引用绑定到“operator =”调用结束后将存在的对象。