我读到将运算符实现为 friend 功能会更好。当我已经拥有+运算符功能时,如何将+ =运算符作为 friend 函数重载:

friend Dollar operator+(const Dollar &p1, const Dollar &p2);
friend Dollar &operator+=(const Dollar &p1, const Dollar &p2);

这是错误的,因为我需要返回对变量的引用。
Dollar &operator+=(const Dollar &p1, const Dollar &p2)
{
    return p1+p2;
}

最佳答案

重载运算符作为 friend 函数更好,以便允许将转换应用于表达式的左侧和右侧。例如,stringoperator+是一个 friend ,因此我可以写"Hello " + string("World")而不是只能写string("Hello ") + "World"

但是,这种推理不适用于operator+=之类的更改器(mutator)。您必须采用非常量left参数,这排除了可以在临时位置使用此运算符的可能性。因此,建议将非突变运算符实现为friend(或其他形式的免费)函数,并将突变体实现为成员函数。 (实际上,operator=只能作为成员函数重载。)

09-16 10:08