使用超载操作员可以实现另一个操作员超载



例如,如果我已经超载了 运算符

myClass & operator + (const myClass & rhs)

,还超载=操作员

myClass & operator = (const myClass & rhs)

两个操作员都可以正常工作。我可以在我的 =操作员过载中使用此重载运算符吗?

myClass & operator += (const myClass & rhs){
*this = *this + progA;
return *this;
}

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

您可以做到这一点。但是,更常见的是使用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中的第一个对象是临时对象。

最新更新