是否可以使用重载运算符来实现另一个运算符重载?

时间:2018-04-04 17:48:16

标签: c++ oop coding-style operator-overloading

例如,如果我重载了一个+运算符

myClass & operator + (const myClass & rhs)

并且也是overloaded = operator

myClass & operator = (const myClass & rhs)

两家运营商都运转良好。我可以在我的+ =运算符重载中使用这个重载运算符吗?

myClass & operator += (const myClass & rhs){

*this = *this + progA;

return *this;

}

上面的代码工作正常。我只是想知道这是不是很好的代码编写实践,或者我应该重新使用前面两个实现的代码来进行+ =运算符重载。

1 个答案:

答案 0 :(得分:3)

你可以做到这一点。但是,使用operator+而不是相反的方式实施operator+=更为常见。

myClass & operator += (const myClass & rhs) { ... )

// Return by value.
// const member function.
myClass operator + (const myClass & rhs) const
{
    myClass ret = *this; // Uses copy constructor, not assignment.
    return ret += rhs;
}

界面

myClass & operator + (const myClass & rhs);

不是惯用的,因为你无法做到等同于

int a = 10 + 20;

使用

MyClass a = MyClass(args...) + MyClass(args...);
由于RHS中的第一个对象是临时对象,因此

无法工作。