Rau*_*ulp 15 c++ operator-overloading
我像这样重载了+运算符
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;
}
Run Code Online (Sandbox Code Playgroud)
它是否正确?我的问题是如果我想添加两个不同的样本对象,我将如何重载opeartor; 例如s = s1 + s2;
我觉得要做s = s + s1 + s2现有的实施.
hig*_*aro 22
使用友元运算符重载应该为您提供技巧,并且是定义二元运算符的常用方法,只需添加:
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);
}
Run Code Online (Sandbox Code Playgroud)
如果你希望它仍然是一个成员(在一些罕见的场景中有缺点,并且没有上升空间),你必须使操作符成为一个const函数:
sample operator+(sample s) const; //in class
sample sample::operator+(const sample& b) const { //outside the class
return sample(this->x + b.x);
}
Run Code Online (Sandbox Code Playgroud)
其中任何一个都允许操作员链接.你之前s = s + s1 + s2失败的原因是,它s + s1会执行并返回一个临时 sample对象.然后,它会尝试添加s2到该样本.但是,临时数只能是const参考文献[1],因此只能使用const成员函数.由于您的operator+成员函数不是const函数,因此您无法在const临时函数上使用该函数.请注意,为了实现它const,我必须重写它,因为你的版本修改了左边的对象+.
[1]有例外在这里并不特别相关,即rvalues