重载加法赋值运算符在C ++两/两个以上的对象?(Overloaded Addition assig

2019-06-25 17:10发布

我重载+操作这样的

class sample
{
private : 
  int x;
public :
  sample(int x1 =0)
  {
    x = x1;
  }

  sample operator+(sample s);
};

sample sample::operator+(sample s)
{
  x = x + s.x;
  return *this;
}

int  main()
{
  sample s1(10);
  sample s2;
  s2 = s2 + s1;
  return 0;    
}

它是否正确? 我的问题是,如果我想补充我怎么会超载的opeartor两个不同的样本对象; 例如,对于s = s1 + s2 ;

我觉得做s = s + s1 + s2与现有的实现。

Answer 1:

使用朋友运算符重载应该为你做的伎俩,并定义二元运算符的常用方法,只需添加:

friend sample operator+(const sample& a, const sample& b); //in class

sample operator+(const sample& a, const sample& b) { //outside the class
    return sample(a.x + b.x);
}

如果你想让它仍然是一个成员,(其中有一些罕见的情况下缺点,并没有上升空间),你必须让操作员const功能:

sample operator+(sample s) const; //in class

sample sample::operator+(const sample& b) const { //outside the class
    return sample(this->x + b.x);
}

无论是这些将允许运营商链接。 之所以以前的s = s + s1 + s2不灵了,就是s + s1将执行,并返回一个临时的 sample对象。 然后,它会尝试添加s2到样品。 然而,临时对象只能是const参考文献[1],因此,只能用const成员函数。 由于您的operator+成员函数不是一个const功能,您不能使用在该函数const暂时的。 请注意,以使其const ,我不得不重写它,因为你的版本修改在左侧的对象+

[1]例外是不是特别与此有关,即右值



文章来源: Overloaded Addition assignment operator in C++ for two /more than two objects?