首页 > 解决方案 > 是否通过引用返回成员方法重载

问题描述

所以我看到了一个关于类中运算符重载的视频。这个类是一个虚构的Number类,它实例化了实数,可以像这样使用Number first(1)or Number second(2)(数字存储在一个 num 数据成员中),然后我们将运算符重载为成员方法,以便能够做到这一点first + secondor -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
}

现在视频说如果对象在过载后用于链操作,我们应该通过引用返回一个对象,我也听说这取决于性能(是为了避免复制吗?),但在那之后我' m 仍然不确定何时在类运算符重载中通过引用返回对象。

提前致谢。

标签: c++oop

解决方案


您可以调用重载运算符,如:

  1. 二元算术运算:直接调用重载的运算符函数,方法与调用普通函数的方式相同:

    number1 + number2;              // normal expression
    operator+(number1, number2);    // equivalent function call
    

    在这种情况下,两个调用是等效的。两者都调用非成员函数,作为第一个参数和第二个参数operator+传递。二进制算术运算不会修改任何一个操作数 - 它实际上从两个参数返回一个新值。因此,您不返回参考。number1number2

  2. 复合赋值运算:另一个选项是显式调用成员运算符函数:

    number1 += number2;             // expression-based call
    number1.operator+=(number2);    // equivalent call to a member operator function 
    

    在这里,这两个语句都调用成员函数operator+=,绑定this到地址并作为参数number1传递。number2因此,您将其作为参考返回。

    Number& operator+=(const Number& rhs) // compound assignment
    {                          
        /* addition of rhs to *this takes place here */
        return *this; // return the result by reference
    }
    

推荐阅读