繁体   English   中英

运算符与朋友和成员函数重载

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM