有很多关于C ++好友关键字的帖子。我看到有朋友课的好处。关于封面是否被friend关键字破坏,提出并回答了许多问题,但所有这些响应似乎都是针对使用朋友进行课程的。
但朋友的功能怎么样?我不能为我的生活看到为什么你会想要这个。一旦你有任何朋友的功能,你是否允许任何一个类来访问你所有的私人数据/功能?
class Foo
{
private:
int neverSetToZero;
public:
Foo() { neverSetToZero = 1; }
friend void Whateveryoudowiththisdonttouchneversettozero(Foo * t);
};
void Whateveryoudowiththisdonttouchneversettozero(Foo * t)
{
(*t).neverSetToZero=0;
}
int main()
{
Foo t;
Whateveryoudowiththisdonttouchneversettozero(&t);
return 0;
}
答案 0 :(得分:6)
我说朋友函数只是该类公共接口的扩展,它使用稍微不同的语法并允许对其所有参数进行隐式转换(而成员函数不做在他们的第一个/暗示参数上。)
换句话说,授予友谊的班级的作者应该是控制朋友功能的人。如果您只是在类中声明了一个友元函数并允许客户端定义该函数,那么肯定会崩溃(程序崩溃)。但这并不是朋友的功能所在。
答案 1 :(得分:4)
但朋友的功能怎么样?我不能为我的生活看到你为什么会这样想。
添加friend
函数的常见用例是将实现逻辑放入一个不能成为函数的函数中,而必须是一个独立函数。
例如,非成员二元运算符和<<
运算符的重载通常是相应类的朋友。
在我见过的friend
函数的所有情况下,函数“friends”的代码也提供了相同函数的实现。没有用于在课堂上留下未实现的朋友功能的用例。从本质上讲,该功能可让您根据班级知识构建独立逻辑。