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

2024-01-20

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

myClass & operator + (const myClass & rhs)

并且还重载了 = 运算符

myClass & operator = (const myClass & rhs)

两个运营商都工作正常。我可以在 += 运算符重载中使用这个重载运算符吗?

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

*this = *this + progA;

return *this;

}

上面的代码工作正常。我只是想知道这是否是良好的代码编写习惯,或者我应该重新使用前面两个实现中的 += 运算符重载的代码。


你可以这么做。然而,更常见的是实施operator+ using 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;

Using

MyClass a = MyClass(args...) + MyClass(args...);

不起作用,因为 RHS 中的第一个对象是临时对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以使用一个重载运算符来实现另一个运算符重载? 的相关文章

随机推荐