问题标签 [friend]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
30 回答
177529 浏览

c++ - 什么时候应该在 C++ 中使用“朋友”?

我一直在阅读C++ FAQ并对声明感到好奇friend。我个人从未使用过它,但是我对探索这种语言很感兴趣。

什么是使用的好例子friend


再阅读一下FAQ,我喜欢<< >>运算符重载并添加为这些类的朋友的想法。但是我不确定这如何不破坏封装。这些异常何时可以保持在 OOP 的严格性范围内?

0 投票
7 回答
894 浏览

c++ - 类设计与 IDE:非成员非友元函数真的值得吗?

在(否则)优秀的书C++ 编码标准第 44 条,标题为“Prefer writing nonmember nonfriend functions”中,Sutter 和 Alexandrescu 建议只有真正需要访问类成员的函数本身就是该类的成员。仅使用成员函数可以编写的所有其他操作不应该是类的一部分。他们应该是非会员和非朋友。论据是:

  • 它促进了封装,因为需要访问类内部的代码更少。
  • 它使编写函数模板更容易,因为您不必每次都猜测某个函数是否是成员。
  • 它使类保持较小,从而使其更易于测试和维护。

虽然我看到了这些参数的价值,但我看到了一个巨大的缺点:我的 IDE 无法帮助我找到这些函数!每当我有某种对象时,我想看看它上面有哪些可用的操作,我不能再只输入“ pMysteriousObject->”来获取成员函数的列表。

保持简洁的设计最终是为了让您的编程生活更轻松。但这实际上会使我的工作更加困难。

所以我想知道这是否真的值得麻烦。你怎么处理?

0 投票
18 回答
92679 浏览

java - 有没有办法在 Java 中模拟 C++ 的“朋友”概念?

我希望能够在一个包中编写一个 Java 类,该类可以访问另一个包中的类的非公共方法,而不必使其成为另一个类的子类。这可能吗?

0 投票
22 回答
60023 浏览

c# - 为什么 C# 不提供 C++ 风格的“朋友”关键字?

C++ 朋友关键字允许将 a指定class A为其class B朋友。这允许Class B访问private/的protected成员class A

我从来没有读过任何关于为什么 C#(和 VB.NET)忽略它的内容。对这个较早的 StackOverflow 问题的大多数答案似乎都在说它是 C++ 的一个有用部分,并且有充分的理由使用它。根据我的经验,我不得不同意。

在我看来,另一个问题实际上是在问如何friend在 C# 应用程序中做类似的事情。虽然答案通常围绕嵌套类,但它似乎不如使用friend关键字那么优雅。

最初的《设计模式》一书在其示例中经常使用它。

所以总而言之,为什么 C# 中friend缺少,以及在 C# 中模拟它的“最佳实践”方式(或方式)是什么?

(顺便说一句,internal关键字不是一回事,它允许整个程序集中的所有类访问internal成员,同时friend允许您让某个类完全访问另一个

0 投票
2 回答
6896 浏览

c++ - 你如何将结构模板标记为朋友?

我有这样的代码:

赋予模板友谊的正确语法是什么?

0 投票
7 回答
2303 浏览

c++ - c++类朋友

我正在尝试编译这样的代码:

但 get 'CCube::Position' 在函数 main() 中无法访问 3 次。我希望在 CCube 之外声明 CPosition 类,以便将来可以在新类中使用它,例如 CBall :) 但是如何在不使用继承的情况下使其工作。是否可以 :)?

问候,PK

0 投票
5 回答
3334 浏览

.net - 使用“朋友”声明进行单元测试。馊主意?

[当然,问题不限于特定的“朋友”实现,尽管如果相关,请随时指出实现细节]

阅读未回答的问题,我偶然发现了这个InternalsVisibleTo属性:

指定通常仅在当前程序集中可见的类型对另一个程序集可见。

MSDN上的C# Programming Guide有一节Friend Assemblies描述了如何使用属性来允许对另一个程序集使用方法和类型。internal

我想知道使用它来创建一个“隐藏”接口来检测库以供单元测试程序集使用是否是一个好主意。它似乎在两个方向上都大大增加了耦合(在生产程序集中测试代码,在测试代码中对生产程序集的深入了解),但另一方面,它可能有助于创建细粒度的测试,而不会弄乱公共接口。

你在测试时使用友元声明是什么体验?是你的银弹,还是它开始了死亡行军?

0 投票
5 回答
18503 浏览

php - PHP 等价于朋友或内部

php 中是否有“朋友”或“内部”等价物?如果没有,是否有任何模式可以遵循来实现这种行为?

编辑: 对不起,但标准的 PHP 不是我要找的。我正在寻找类似于 ringmaster 所做的事情。

我有一些类在后端进行 C 风格的系统调用,而且杂耍已经开始变得很麻烦。我在对象 A 中有函数,这些函数将对象 B 作为参数,并且必须调用对象 B 中的一个方法,并将自身作为参数传递。最终用户可以调用 B 中的方法,系统就会崩溃。

0 投票
5 回答
604 浏览

c++ - 什么时候在 OOP 中使用友谊是谨慎的?

我目前正在阅读http://www.cplusplus.com教程,我在这里遇到了这个部分:http ://www.cplusplus.com/doc/tutorial/inheritance.html 处理朋友功能的主题和C++ 中的朋友类

我的问题是,什么时候在创建程序时谨慎使用友谊?

我得到的唯一线索是在文章中的一个示例中,该示例演示了一个“复制”对象的友元函数。

0 投票
2 回答
55784 浏览

java - Java的“朋友”等价物?

这里有一点架构问题。

在 C++ 中,我们有“朋友”的概念,这样的朋友类可以访问私有成员。

所以,我正在开发一个 Java 应用程序并尝试遵守 MVC 架构。我有一个控制器类来管理“map_objects”之间的图形连接。我想通过使用这个控制器类来隐藏 DTO 'map_objects' 中实际设置这些连接的函数。

(即,即使控制器类实现了设置连接所需的功能,“用户”仍然可以直接访问 DTO 中的 setter/getter 函数来自行设置它们。)

在这方面是否有任何设计模式或提示?(或者我完全搞砸了?)

重复 有没有办法在 Java 中模拟 C++ 的“朋友”概念?