问题标签 [friend-class]

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 回答
104 浏览

c++ - 使用 C++ 中的继承/友元类了解成员访问

来自 C++ Primer 5th edition:
看看这些类:

这里的 Pal 是 Base 的友元类,而 Sneaky 继承自 Base 并在 Pal 中使用。现在最后一行s.prot_mem被调​​用,作者给出了它工作的原因,因为 Pal 是 Base 的友元类。但是到目前为止,我的理解告诉我它应该可以正常工作,因为 s 派生自 Base 而 prot_mem 是 Base Class 的受保护成员,它应该已经可以访问 Sneaky,你能解释一下为什么我错了或者更详细请?

0 投票
2 回答
12198 浏览

c++ - 将命名空间声明为类的朋友

我想知道是否有一种方法可以让我们使用类在特定命名空间中定义所有函数friend

特别是,我有一堂课,例如:

和命名空间B为:

现在,我宁愿避免在类定义中写 5 行来使命名空间的所有五个函数都B与类成为朋友,C而只是告诉编译器命名空间中定义的所有函数B都是类的朋友C(即可以访问其私有成员)。

我想一个快速的解决方法是将命名空间更改为一个类并将函数定义为其静态成员,然后将该类声明为 classB的朋友C。但是,出于好奇,我想知道命名空间是否也可以做到这一点?

提前致谢。

0 投票
1 回答
164 浏览

c++ - 使用组合或朋友类将其他类的成员函数访问到 `this` 类的成员函数

我正在使用“组合”编写课程,如下所示 -

这里, FibonacciDynamic, FibonacciRecursive&FibonacciSequential是在头文件中声明的类。现在,这里的主要问题是,在使用se.fib(), re.fib&dy.fib()函数时,它给了我类似的错误

error C2228: left of '.fib' must have class/struct/union

有没有其他方法可以在这里使用组合方法而不会出现上述错误?

如果不是,那么是否可以将它们用作朋友类并在类的成员函数中访问它们的成员函数fibonacci

谢谢。

0 投票
2 回答
254 浏览

c++ - 如何声明模板友元函数的特化

有一个模板:

我有 operator<< 作为朋友类:

我想要做的是对整数的该函数进行专门化,其中-输出的元素之间将有一个空格,而不是空格。我试过了

但是当我编译主

调用 operator<< 的一般形式,而不是我的专业。我想我并没有真正专攻它。任何帮助如何声明朋友类的专业化?

基于 WhozCraig 答案的解决方案

前向声明:

类内声明:

友元函数的定义:

0 投票
2 回答
130 浏览

c# - 如何制作一个对象以仅在 C# 中为某些用户提供更改功能?

我正在 C# 中创建半边数据结构的实现。这个结构的细节与我的问题无关,所以我只会尽可能深入地介绍它,但如果有人感兴趣,可以在Flipcode上找到一个简短的摘要。

我的数据结构的面向对象表示由 4 个类组成:Halfedge、和Edge,它们相互包含一些相互引用。(特别是:每条半边引用一个顶点,而每条边、顶点和面都引用一个半边。)处理和维护这种低级表示是一项艰巨的任务,因此它的修改不应该暴露给代码的用户,以保证数据结构的一致性。VertexFace

为了实现这一点,我创建了第 5 个Graph类以在它们之上提供更高的抽象层。这个想法是代码/库的用户只需要与Graph实例通信来构建或查询拓扑模型,而不必处理半边、边、顶点和面的低级关系;因此他们不能破坏它。

现在来解决问题。面、顶点、边和半边都需要可从Graph. 半边数据结构包含有关数据的拓扑信息,因此请求例如给定面或边的相邻面是一种资源高效的查询。如何使用这些类的示例:

出于显而易见的目的,Graph对象需要操纵包含的HalfedgeEdgeVertex对象的内部状态Face,以根据用户给出的输入构建和维护数据结构。然而,如果这 4 个类有public方法(或属性)来改变它们的状态,那么对用户隐藏表示的整个想法就被破坏了,因为它们可以被用户直接调用。(可惜C#现在没有朋友类的概念。)

如果我将HalfedgeEdgeVertexFace嵌套在里面Graph并且不将它们公开,那么就不可能为用户检索这些类型。例如:

所以基本上我的问题是最好遵循什么设计来实现这样的数据结构。、Halfedge和类需要公开一个接口来为类修改它们 Edge,而不是为其他类。可访问性不好,因为它会为整个程序集公开这些功能。VertexFaceGraphInternal

我应该为它们创建“只读”包装类吗,因为 .NET 中的许多集合都有一个只读包装(如List<T>),并且在返回对象时只为用户公开那些(例如AddFace())?

0 投票
2 回答
511 浏览

c++ - 如何从其朋友类访问抽象类的私有成员?

如何访问 B 类中 A 类的私有成员。我无法创建 A 类的对象,因为它是抽象的。我必须以某种方式使用 C 类的对象来做到这一点,但如何?

0 投票
1 回答
177 浏览

c++ - 朋友类如何访问嵌套类的私有成员?

考虑以下示例:

它不会编译,因为 BusInfo 结构是私有的。默认情况下,友元类不能访问嵌套类的私有成员。在那种情况下我该怎么办?有什么解决方法吗?

0 投票
1 回答
45 浏览

c++ - c++ 一个类可以包含一个与它是朋友的类成员吗?

我有一个名为 Restaurant 的类,其中包含一个 Employee 成员。现在 Employee 是 Restaurant 的朋友班。当我尝试编译它时,我在 Employee mCurrentEmployee 上收到错误,说它缺少类型说明符 - 假定为 int。为什么编译器会为此生我的气?关于如何修复它的任何想法?谢谢。

-

0 投票
1 回答
366 浏览

c++ - C++:如何使一组派生类能够访问一个类的私有成员?

假设一个类:图书馆

而我们有一组从基类LibraryCustomer派生的类,如:Kid、Parent、Student等

在 Library 类中,有一组(大量)私有成员变量。由于 Library 类中有大量私有成员,我不想使用乏味的 getter 和 setter。此外,LibraryCustomer 派生类通常会引用这些成员。Getter 和 Setter 不方便。

为了让这些 LibraryCustomers 访问 Library 中的那些私有成员,我需要将这些 LibraryCustomers 声明为 Library 中的朋友类。

但是由于派生类不断增长,我不想在类库中一一添加。

在 Library 中添加基类 LibraryCustomer 作为朋友似乎不起作用。那么还有什么更好的方法呢?

[更新] 我想访问库类中的大量私有成员变量。由于有很多,所以我不想使用getter和setter。我希望LibraryCustomer的派生类可以自由访问Library类中的那些私有成员变量。

0 投票
1 回答
235 浏览

c++ - 在函数参数中创建朋友类实例

我是使用 C++ 的新手。我需要将一个类的实例声明为另一个类中函数的参数,并将参数实例声明为朋友。我用一个例子来说明。

在上面的示例中,我需要将类 other_foo 声明为 foo 的朋友,以便我可以使用 foo 类的私有函数“a”。我已经阅读了许多其他参考资料,但没有关于它是否真的可能的明确指南。如果没有,你能建议一个解决方法吗?我试图在类 foo 定义中将 other_foo 声明为友元,但编译器在 other_foo 中抛出了一个错误,即私有方法不可访问。我也尝试在参数本身中将实例声明为“friend foo f”,但编译器为此抛出了错误。我实际上需要在哪里声明 other_foo 类是 foo 类的朋友类?