使用好友和成员函数的运算符重载

operator overloading with friend and member function

本文关键字:运算符 重载 函数 成员 好友      更新时间:2023-10-16

在类中,如果我们同时使用成员函数和友元函数来重载+运算符,它会给出一个错误,即"运算符+"的不明确重载如何解决

我建议将其实现为非成员函数。这样,您可以使用其他组合重载函数。例如,假设您有一个类Point和另一个类Vector(一个gometric向量,而不是std::vector)。

你可以重载

Point operator+(Point const&, Vector const&);
Point operator+(Vector const&, Point const&);

如果将其实现为成员函数,则仅在类中实现其中一个函数。要实现两者,您必须将第一个实现为 Point 的成员函数,第二个实现为 Vector 的成员函数。

如果你真的愿意,你可以有一个成员和非成员重载operator+

Foo a, b;
a.operator+(b); //call member function
operator+(a, b); //call non-member function

但是,它破坏了运算符的全部意义,因为您必须实际写出方法调用。


旁注:非会员operator+不需要是好友功能。它很容易写成:

Foo operator+ (Foo lhs, const Foo& rhs)
{
    return lhs += rhs;
}