【发布时间】:2020-04-03 22:23:32
【问题描述】:
所以我看到了一个视频,讨论了类中的运算符重载。这个类是一个虚构的Number 类,它实例化了实数,可以像这样使用Number first(1) 或Number second(2)(数字存储在一个 num 数据成员中),然后我们将运算符重载为成员方法,以便能够这样做first + second 或-first。这些运算符重载的代码如下所示:
PS:rhs 右侧
Number &Number::operator+(const Number &rhs) {
//perform math calculation between both objects
return *this; //return lhs by reference
}
或者这个对于一元减号运算符,它只返回单个整数的减号版本(无用但用作示例):
Number operator-() {
int temp = -num;
return temp;//temporary
}
现在视频说如果在链式操作中使用对象,我们应该通过引用返回一个对象,在它经历了重载之后,我也听说这取决于性能(是为了避免复制吗?),但之后我仍然不确定何时在类运算符重载中通过引用返回对象。
提前致谢。
【问题讨论】:
-
你有
operator+的完整实现吗? -
Here 你可以找到关于运算符重载一般规则的非常好的解释。通常,返回类型不应取决于运算符是作为成员函数重载还是作为非成员函数重载。在这些特定情况下,
operator+和operator-应该按值返回,因为它们应该返回一个新值,而不是修改调用它们的对象。 -
二进制非赋值操作通常不应该返回引用,它们通常也是 const,不修改它们的参数。
a+b中的二进制加号将修改a并返回它。这是operator+=的策略