朋友的功能

时间:2011-06-28 20:04:19

标签: class encapsulation friend

只是一个关于朋友功能使用的简单问题,或者更确切地说是它们的用处。基本上..

它们有用吗?如果你已经正确设计了课程,那么真的需要朋友的功能吗?您想要使用或不使用它们的情况是什么?我被告知他们增强了封装,但根据我的经验,我在编码的7年里只使用了一个朋友功能。在进一步检查和重构我的代码之后,我意识到我甚至不需要使用它。看起来他们有点违反了封装,而不是强化封​​装。这可能是由于我对该地区缺乏了解。

tldr;朋友函数有什么用处,何时应该/不应该使用它们,以及它们如何增强封装?

3 个答案:

答案 0 :(得分:1)

谁告诉你朋友的功能增强封装是完全错误的,他们恰恰相反。他们真正没有真正的OOP世界。

然而,生活很少是完美的,有时您需要从框架内的其他类调用受保护的方法,而不会将它们暴露给外部。 C#和Java非常优雅地解决了这个问题:它们有一个internal修饰符(意思略有不同),但在C ++中你只有friend

如果您真正编程了7年而没有需要此构造,那么您可以在类public中创建每个方法和变量,或者根本不使用类。

答案 1 :(得分:1)

我能想到的一个场景是多个项目共享代码的时候。您的B类需要访问A类中的私有成员,该成员由一个单独的组拥有。如果你不能破坏该类的现有合约,你可以添加一个友方法,它可以满足您的需要而不会破坏其他组的任何内容。

当然,现在使用.NET 4,我们可以向类中添加动态方法,从而完全消除了我的场景。

答案 2 :(得分:-1)