在容器上使用重载运算符

时间:2016-04-03 23:02:47

标签: c++ arrays operator-overloading overloading

我有一个包含整数数组的简单类。我想重载+将两个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;

我是新手,因为我很难分析和理解这个概念。

2 个答案:

答案 0 :(得分:2)

基本问题在这里,并没有与重载有任何关系:

Money & operator +( const Mone &a ) {
    Money temp;
        :
    return temp;

问题在于您返回对局部变量的引用,该函数在函数返回时被销毁,因此是悬空引用,导致未定义的行为。

将其更改为按值返回Money

答案 1 :(得分:1)

我理解operator +中的问题,你正在创建一个临时变量temp。该变量将一直存在,直到“operator +”的代码完成。当您返回对该变量id est的引用时,本质上是一个隐藏的指针,当代码完成时,该引用不再有效。如果你改变代码并按值返回,一切都应该正常工作。相反,对于=运算符,事情正常工作,因为您返回的引用绑定到“operator =”调用结束后将存在的对象。