gpt4 book ai didi

c++ - C++中两个/两个以上对象的重载加法赋值运算符?

转载 作者:IT老高 更新时间:2023-10-28 22:26:38 24 4
gpt4 key购买 nike

我已经像这样重载了 + 运算符

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;
}

这是正确的吗?我的问题是如果我想添加两个不同的示例对象,我将如何重载操作符;例如 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 会执行并返回一个 temporary 示例 对象。然后,它会尝试将 s2 添加到该示例中。但是,临时对象只能是 const 引用[1],因此只能使用 const 成员函数。由于您的 operator+ 成员函数不是 const 函数,因此您不能在 const 临时使用该函数。请注意,要使其成为 const,我必须重写它,因为您的版本修改了 + 左侧的对象。

[1] 异常(exception)在这里并不特别相关,即右值

关于c++ - C++中两个/两个以上对象的重载加法赋值运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11161541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com