1

我对如何使用友元函数完成以下操作有点困惑。

假设我有一个类 A,其成员函数“f”将被声明为类 B 的朋友。

据我了解,正常的解决方案是这样的:

定义 A 类,仅声明未定义“f”

定义 B 类,包括“f”的朋友声明

定义'f'

现在,如果 A 类具有 B 类类型的数据成员或 B 类型元素的容器,如 vector < B >,该怎么办。

前向声明 B 类似乎有效(即没有编译器警告/错误),但我不确定它是否符合 C++11 标准。此外,这样的解决方案不允许我使用 B 类的构造函数为 A 的 B 类类型成员提供类内初始化程序。按照 C++11 完成所有这些的最佳方法是什么?

我尝试从标准本身中找到解决方案,但找不到提到这种情况。如果有人能指出我会很高兴。

PS我真的是一个初学者,所以请不要在你的答案中假设。不过我不介意详细的答案:)

4

1 回答 1

0

您应该阅读有关此问题的 MSDN 文章:Class Member Functions and Classes as Friends

基本上你需要做的是有一个A带有 function的类类型f(),然后你在类类型中声明B存在一个函数A::f(),它将成为你的朋友。

MSDN 示例很好地说明了这一点:

class A {
public:
   int Func1( B& b );

private:
   int Func2( B& b );
};

class B {
private:
   int _b;

   // A::Func1 is a friend function to class B
   // so A::Func1 has access to all members of B
   friend int A::Func1( B& );
};

int A::Func1( B& b ) { return b._b; }   // OK
int A::Func2( B& b ) { return b._b; }   // C2248
于 2013-03-16T15:03:53.070 回答