在这种情况下,如何将成员函数设置为好友函数

How to make a member function a friend function in this scenario?

本文关键字:函数 设置 好友 成员 这种情况下      更新时间:2023-10-16

我对如何使用好友函数完成以下任务有点困惑。

假设我有一个类a,它的成员函数'f'要声明为类b的友元。

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

定义类A,只声明'f'而未定义

定义类B,包括'f'的友元声明

定义f

现在,如果类A具有类类型为B的数据成员或B类型元素的容器(如vector .

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

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

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

您应该阅读有关此问题的MSDN文章:类成员函数和类作为朋友

基本上你需要做的是有一个类类型A和一个函数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