重载+=操作符作为友元函数
Overload += operator as friend function
我读到将操作符实现为友元函数会更好。当我已经有+ operator函数时,如何重载+= operator作为友元函数:
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;
}
将操作符重载为友元函数更好,以便允许转换同时应用于表达式的左右两侧。例如,string
的operator+
是朋友,所以我可以写"Hello " + string("World")
,而不是只能写string("Hello ") + "World"
。
然而,这个推理并不适用于像operator+=
这样的突变体。必须接受一个非const左实参,这就排除了在临时对象上使用此操作符的可能性。出于这个原因,建议将非变异操作符实现为friend
(或其他自由)函数,将变异操作符实现为成员函数。(实际上,operator=
只能作为成员函数重载)
还需要修改左值
Dollar &operator+=(Dollar &p1, const Dollar &p2)
{
p1=p1+p2;
return p1;
}
通常的方法是将+=
作为修改*this
的成员函数提供,并将+
作为使用+=
的自由函数实现。
相关文章:
- C++模板来检查友元函数的存在
- 如何使用单独文件中的派生类访问友元函数对象
- 模板化的类和友元函数
- 友元函数无法访问私有数据成员 (c++)
- 继承和友元函数,从基类访问受保护的成员
- 如何在友元函数中使用静态成员而不添加前缀 [类名]::
- 在模板类之外定义友元函数的正确方法是什么?
- 2个模板化类的非模板友元函数未定义引用错误
- C++ 友元函数和私有构造函数
- 使第二个类的构造函数成为第一个类中的友元函数
- 未定义的类模板不会实例化以检查友元函数
- C++类中的友元函数有问题?
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 模板类中的模板友元函数
- C++ 17 个友元函数声明和内联命名空间
- 友元函数需要一个帮助程序函数
- 在类内定义的友元函数与类外定义的友元函数的查找规则之间的差异
- 运算符重载在 C++ 中使用友元函数
- 类C++友元函数无法访问封装的类
- 函数指针作为友元函数