在什么情况下应该将成员函数声明为朋友?

Pra*_*. S 5 c++ function friend

在什么样的情况下我们会将成员函数声明为"朋友函数"?具体目的是什么'朋友函数'违背了OOP服务的'封装'的核心概念之一?

Leo*_*Hat 2

使用友元函数的原因与使用友元类的原因相同,但基于成员函数(而不是整个类)。这个线程中有一些很好的解释。

虽然友元函数和类确实违反了封装,但它们在某些情况下可能很有用。例如,您可能希望允许测试工具访问类内部,以允许您进行白盒测试。您可以打开一个特定的函数来访问测试工具所需的内部结构,而不是向测试工具开放整个类。虽然这仍然违反了封装性,但它比开放整个类的风险要小。

另请参阅本文以获取有关友元类和函数的更多信息。