397得票31回答
在C++中,何时应该使用'friend'?

我一直在阅读 C++ FAQ,对 friend 声明很好奇。我个人从未使用过它,但我有兴趣探索这门语言。 有没有使用 friend 的好例子? 继续阅读FAQ,我喜欢重载 << >> 操作符并将其添加为那些类的友元的想法。但我不确定如何做到不破坏封装性。这些例外...

239得票18回答
有没有一种方法在Java中模拟C++中的“friend”概念?

我想在一个Java包中编写一个类,可以访问另一个包中的类的非公共方法,而不必将其作为另一个类的子类。这种做法是否可行?

227得票5回答
C#中的“friend”对应什么?

可能有重复: 为什么C#不提供类似C++的“friend”关键字? 我希望在不将私有成员变量暴露给其他类的情况下,让Tester类可以访问类的私有成员变量。 在 C++ 中,我只需将Tester类声明为友元类即可,那么在C#中该如何实现?能否给出一个示例?

224得票22回答
为什么C#不提供类似于C++中的“友元”关键字?

C++友元关键字允许类A指定类B为其友元。这允许类B访问类A的private/protected成员。 我从未读过任何关于为什么C#(和VB.NET)没有使用它的内容。早期StackOverflow问题的大多数答案似乎都在说这是C++的一个有用部分,有很好的理由使用它。根据我的经验,我必须同...

214得票2回答
公共友元交换成员函数

在对拷贝并交换惯用法的精美回答中,有一段代码我需要一点帮助:class dumb_array { public: // ... friend void swap(dumb_array& first, dumb_array& second) // nothrow ...

177得票4回答
C++中的友元声明 - public和private之间的区别

将友元函数/类声明为私有(private)或公共(public),是否有区别?我在网上找不到相关资料。 我是指以下两种情况之间的区别:class A { public: friend class B; }; 和class A { private: //or nothing ...

101得票9回答
为什么C++不允许继承友元关系?

为什么在C++中友元不至少是可继承的呢?我理解传递性和自反性因为明显的原因而被禁止(我这样说只是为了避免简单的FAQ引用答案),但类似于 virtual friend class Foo; 的东西的缺失让我感到困惑。有人知道此决定背后的历史背景吗?友情是否真的只是一个有限的hack,现在已经发...

86得票5回答
C++中的内部类会自动成为友元吗?

如果我在C++中定义一个内部类,它会自动成为包含它的类的友元吗?例如,这样做是否合法:class Outer { public: class Inner { public: void mutateOuter(Outer& o); }; priv...

86得票5回答
为类模板重载友元运算符<<

如果我将过载的`#include &lt;iostream&gt; using namespace std; template &lt;class T&gt; T my_max(T a, T b) { if(a &gt; b) return a; else return...

73得票7回答
把单元测试作为被测试类的友元有什么问题?

在C++中,我经常将一个单元测试类设置为被测试类的友元。我这样做是因为有时我需要编写一个私有方法的单元测试,或者我想要访问一些私有成员以便更轻松地设置对象的状态,从而进行测试。对我来说,这有助于保留封装和抽象,因为我不会修改类的公共或受保护接口。 如果我购买第三方库,我不希望其公共接口因为供...