运算符+重载返回值为Operator =

时间:2013-09-19 02:44:07

标签: c++ overloading

我正在尝试将operator +的结果返回给operator =但是在operator =中返回* this时会出现假值;当调用rhs并访问其函数时,值是正确的,但是operator =不发送类的副本错误吗?

          VecXd& operator=(const VecXd &rhs)
           { 

              cout << rhs.vecArr[0] << " " << rhs.vecArr[1] << " " << rhs.vecArr[2] << " " << endl;
              return *this;    
           }


    VecXd& operator+(const VecXd& rhs){
    VecXd& result = *this;
      cout << "TEST FOR DIMENSION-> " << dimension << endl;
   if(result.dimension == rhs.dimension) //dimension level check
   { 

        for(int i = 0; i < rhs.dimension; i++)
      {
        result.vecArr[i] += rhs.vecArr[i];
        cout << result.vecArr[i] << " our new value" << endl;                 
      } 
      cout << result << " result test!"  << endl;

      return result;
   }
   else{
      cout << "Dimensions do not match!!! Error!" << endl;    
      } 

}

帮助?谢谢!

1 个答案:

答案 0 :(得分:2)

你不要回复result的引用。 result是一个局部变量,退出方法时超出范围。您很可能希望返回result的副本,因此请更改运算符返回类型:

VecXd operator+(const VecXd& rhs) const

这将返回VecXd类型的值,而不是引用。

哦,既然你正在实现+运算符,而不是+ =运算符,你可能想要改变它:

vecArr[i] += rhs.vecArr[i];

也是这样:

result.vecArr[i] = vecArr[i] + rhs.vecArr[i];

并且可能无需使用result

初始化*this