【发布时间】:2016-02-25 05:14:17
【问题描述】:
如果我们在一个类中同时使用成员函数和友元函数来重载+运算符,它会给出一个错误,即'operator+'的重载如何解决
【问题讨论】:
-
那你要打电话给哪一个?
-
删除其中一个...
标签: c++ overloading operator-keyword
如果我们在一个类中同时使用成员函数和友元函数来重载+运算符,它会给出一个错误,即'operator+'的重载如何解决
【问题讨论】:
标签: c++ overloading operator-keyword
我建议将其实现为非成员函数。这样,您可以使用其他组合重载该函数。例如,假设您有一个类 Point 和另一个类 Vector(一个测角向量,而不是 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;
}
【讨论】: