[英]operator overloading with friend and member function
在类中,如果我们同时使用成员函数和朋友函数来重载+运算符,则给出错误,即“ operator +”的模棱两可的重载如何解决
我建议将其实现为非成员函数。 这样,您可以使用其他组合重载该功能。 例如,假设您有一个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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.