我有一个使用friend
这个词的想法,来访问除自己的类之外的私有(private)成员。例如,我有一个 A 类,需要在 A 的方法中访问 B 类属性的私有(private)方法,我可以将该方法声明为友元。
但是,请看下面的代码:
#include <cstdlib>
class Coord {
private:
int x, y;
public:
Coord (int i1, int i2) : x(i1), y(i2) {
}
friend Coord operator- (Coord const& c1, Coord const& c2) {
return Coord(c1.x-c2.x, c1.y-c2.y);
}
Coord abs() {
return Coord(std::abs(x),std::abs(y));
}
};
作为 friend ,哪种好处可能会使运算符(operator)负担过重? 我真的不明白为什么有人会对此感兴趣。
我已经阅读了很多关于它的内容,但我没有得到一个清晰的概念。
谁能写一个小例子让我观察事实?
最佳答案
看看Herb Sutters和 Scott Meyers 的例子:
总结如下:
首先:使运算符像 - 非成员:如果执行 c = a - b minus 属于哪个对象? A?乙?或者没有。大多数人都不同意,因此不是成员(member)。 第二:运营商需要修改私有(private)内容,因此要么你交个 friend ,要么你使用像getters这样的访问函数。所以大多数人都和 friend 在一起。
在您的特定示例中,友元声明紧跟在定义之后,这是定义全局友元函数的最紧凑方式。
关于c++ - 重载运算符作为友元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13778902/