我重载+操作这样的
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
与现有的实现。
使用朋友运算符重载应该为你做的伎俩,并定义二元运算符的常用方法,只需添加:
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?