问题标签 [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 投票
3 回答
18680 浏览

c++ - 朋友和内联方法,有什么意义?

我在标题中看到我没有给自己写以下内容:

我不明白为什么这个方法被声明为朋友。我认为如果函数在另一个地方定义并且需要访问类的内部成员是有意义的,但这里不是这种情况,因为它是内联的,甚至不需要访问成员。

你怎么看?“朋友”没用吗?

0 投票
5 回答
8930 浏览

c++ - C++ 中的友元作用域

如果我有三个班级,A、B、C。A 和 B 是朋友(双向)。此外,B 和 C 是朋友(双向)。A有一个指向B的指针,B有一个指向C的指针。为什么A不能通过指针访问C的私有数据?

澄清一下:这是一个纯理论 C++ 语言问题,而不是设计建议问题。

0 投票
7 回答
52331 浏览

c# - C Sharp 中的“朋友”关键字相当于什么?

C Sharp 中的“朋友”关键字相当于什么?

如何使用“内部”关键字?

我读过'internal'关键字是C#中'friend'的替代品。

我在我的 C# 项目中使用了一个 DLL,我有它的源代码,但我不想修改现有代码。我继承了这个类,我可以以任何我想要的方式使用我继承的类。问题是父类中的大部分代码都有受保护的方法。使用朋友是否可以访问或调用这些受保护的方法?

0 投票
2 回答
6000 浏览

c++ - 友元模板函数(在非模板类中),C++

如果我有一个非模板(即“普通”)类并希望有一个模板友元函数,我该如何编写它而不导致编译器错误?这是一个示例来说明我正在尝试做的事情:

我正在使用 Visual Studio 2005,我得到的具体错误是error C2063,指出“bar”不是函数。这里需要做些什么不同的事情?

0 投票
5 回答
14154 浏览

c++ - 朋友类:继承的类也不是朋友吗?

在 C++ 中,我有一个 A 类,它是 B 类的朋友。

我看起来 B 的继承类不是 A 类的朋友。

我这是 C++ 的限制还是我的错误?

这是一个例子。编译时,“return new Memento”行出现错误:

Memento::Memento :无法访问在 Memento 中声明的私有成员。

我当然可以将 FooOriginator 添加为 Memento 的朋友,但是,这意味着我必须将所有 Originator 继承的类添加为 Memento 的朋友,这是我想避免的。

任何的想法 ?

0 投票
11 回答
25909 浏览

c++ - 何时在 C++ 中使用朋友类

可能重复:
什么时候应该在 C++ 中使用“朋友”?

我在复习我的 C++(我是一名 Java 开发人员)时遇到了friend class一个我已经忘记了一段时间的关键字。这是只是厨房水槽一部分的功能之一,还是有充分的理由这样做,而不仅仅是香草吸气剂?我理解不同之处在于它限制了谁可以访问数据,但我想不出有必要这样做的场景。

注意:我见过一个类似的问题,但我特别想问的是,这只是一个高级功能,除了让人们在看你的代码之前感到困惑,直到他们意识到你在做什么之外,并没有增加任何真正的价值?

0 投票
2 回答
1047 浏览

msbuild - MSBuild 无法构建 C++/CLI 友元程序集

我有 Visual Studio 2008 SP1,两个 C++/CLI 项目,比如说 proj1 和 proj2。proj2 依赖于 proj1,但方式很奇怪(见下文)。在项目依赖项中,我指定 proj2 依赖于 proj1。proj2 参考也包括 proj1。然后我希望 proj1 成为 proj2 的朋友,因此,正如“Friend Assemblies”上的 MSDN 页面所说,我在 proj2 的某处写了这段代码:

编译说 proj1.dll 已经被引用,我应该从 proj2 项目设置中删除项目引用(从而删除 /FU 标志)。

这里出现了错误(?):如果我从 proj2 中删除 proj1 引用,但仍然在解决方案 Project Dependencies 中指定 proj2 依赖于 proj1,那么在 VS2008 中一切都可以编译。但是 MSBUILD 解析项目引用,为 proj2 创建新的临时项目,添加 /FU:proj1.dll 和构建失败!

问题 1:有没有办法禁用此 MSBuild 行为?

然后,如果我删除项目依赖项中的依赖项,MSBuild 构建良好,但 Visual Studio 尝试并行编译 proj1 和 proj2,但失败,因为 proj2 小得多并且首先编译...在项目和解决方案中设置最大并行构建选项/ Build and Run 有帮助,但我必须在每台开发人员机器上都这样做,我无法在解决方案中保存此设置,这会使构建速度变慢等等......

问题2:有没有办法让“项目依赖”成为条件选项?我希望它适用于 VS2008 和 MSBuild ......

0 投票
6 回答
3753 浏览

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

在什么样的场景中,我们会将成员函数声明为“朋友函数”?.. 违背 OOP 的“封装”中心概念之一的“朋友函数”的确切目的是什么?

0 投票
8 回答
646 浏览

c++ - 同行之间的 C++ 友谊是否健康?

虽然阶级友谊是 C++ 的最后手段之一,但这种模式有意义吗?

好的,这种模式的原因是因为 Peers 都是相同级别的,他们需要相互共享知识,但是这个知识是秘密的,因为除了 peer 之外没有人应该使用它,或者程序不再有效.

一个非常真实的例子是,当一个对等点从另一个对等点复制构建时,它需要从其源对等点访问秘密信息,但同样没有理由让其他任何人知道这些内部结构,只有对等点。

0 投票
3 回答
2141 浏览

c++ - 友谊是在 C++ 中继承的吗?

假设我有一Base堂课:

还有另一个(不同的)类继承自Base

友谊也是遗传的吗?