重载+ =运算符作为友元函数

时间:2013-05-31 21:22:13

标签: c++ operator-overloading

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

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;
}

3 个答案:

答案 0 :(得分:4)

将运算符重载为友元函数更好,以便允许转换应用于表达式的左侧和右侧。例如,string的{​​{1}}是朋友,因此我可以写operator+而不是只能写"Hello " + string("World")

但是,这种推理不适用于string("Hello ") + "World"等变异器。你必须采用一个非const左参数,这就排除了能够在临时使用此运算符。因此,建议将非变异运算符实现为operator+=(或其他free-)函数和mutator作为成员函数。 (实际上,friend只能作为成员函数重载。)

答案 1 :(得分:1)

您还需要修改左值。

Dollar &operator+=(Dollar &p1, const Dollar &p2)
{
    p1=p1+p2;
    return p1;
}

答案 2 :(得分:0)

通常的方法是提供+=作为成员函数,修改*this并将+实现为使用+=的免费函数。