Class 好友功能

Class 好友功能,class,encapsulation,friend,Class,Encapsulation,Friend,这只是一个简单的问题,关于友元函数的使用,或者更确切地说是它们的有用性。基本上 它们有什么用处?如果您已经正确地设计了类,那么是否真的需要friend函数?您希望使用或不使用它们的情况是什么?我听说它们增强了封装,但根据我的经验,在我编写代码的7年中,我只使用了一个friend函数。在进一步检查和重构我的代码之后,我意识到我甚至不需要使用它。似乎它们在某种程度上违反了封装,而不是简化封装。这可能是因为我缺乏这方面的知识 tldr;friend函数有什么有用之处,何时应该/不应该使用,以及它们如何

这只是一个简单的问题,关于友元函数的使用,或者更确切地说是它们的有用性。基本上

它们有什么用处?如果您已经正确地设计了类,那么是否真的需要friend函数?您希望使用或不使用它们的情况是什么?我听说它们增强了封装,但根据我的经验,在我编写代码的7年中,我只使用了一个friend函数。在进一步检查和重构我的代码之后,我意识到我甚至不需要使用它。似乎它们在某种程度上违反了封装,而不是简化封装。这可能是因为我缺乏这方面的知识


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

请参见-

请参见-

告诉您friend函数增强封装的人是完全错误的,他们恰恰相反。在一个真正的OOP世界中,它们真的没有位置

然而,生活很少是完美的,有时您需要从框架内的其他类调用受保护的方法,而不将它们暴露于外部。C和java非常巧妙地解决了这个问题:它们有一个<代码>内部<代码>修改器(略微不同的含义),但是C++中所有的代码都是<代码>朋友< /代码>
如果你真的已经编程了7年,而从来没有需要这种构造,那么你要么将类中的每个方法和变量都公开,要么根本不使用类。

告诉你friend函数增强封装的人是完全错误的,他们恰恰相反。在一个真正的OOP世界中,它们真的没有位置

然而,生活很少是完美的,有时您需要从框架内的其他类调用受保护的方法,而不将它们暴露于外部。C和java非常巧妙地解决了这个问题:它们有一个<代码>内部<代码>修改器(略微不同的含义),但是C++中所有的代码都是<代码>朋友< /代码>
如果您真的已经编程7年了,但从未需要过这种构造,那么您要么将类中的每个方法和变量都公开,要么根本不使用类。

我能想到的一种情况是多个项目共享代码。您的类B需要访问属于单独组的类A中的私有成员。如果您无法破坏该类的现有契约,则可以添加一个friend方法,该方法在不破坏其他组的任何内容的情况下执行您需要的操作


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

我可以想到的一个场景是多个项目共享代码。您的类B需要访问属于单独组的类A中的私有成员。如果您无法破坏该类的现有契约,则可以添加一个friend方法,该方法在不破坏其他组的任何内容的情况下执行您需要的操作


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

不,我实际上没有公开所有内容,只是我个人从未发现它们的用途。然而,我可以看到它们对相互通信的对象很有用。不,我实际上并没有把所有事情都公开,只是我个人从来没有发现它们的用途。但是,我可以看到它们对于对象之间的通信非常有用。这篇文章描述了朋友的想法,而不是OP询问的内容。“friend函数有什么用处,何时应该/不应该使用,以及它们如何增强封装?”这篇文章描述了friend函数,而不是OP询问的内容。“friend函数有什么有用之处,何时应该/不应该使用它们,以及它们如何增强封装?”