我对如何使用好友功能完成以下操作感到困惑。
假设我有一个A类,其成员函数'f'将被宣布为B类的朋友。
正如我所理解的那样,正常的解决方案就是这样:
定义A类,其中'f'仅被声明为未定义
定义B类,包括'f'的朋友声明
定义'f'
现在,如果A类具有类型B的数据成员或B类型元素的容器,如vector< B&gt ;.
前向声明B类似乎有效(即没有编译器警告/错误),但我不确定它是否符合C ++ 11标准。此外,这样的解决方案将不允许我使用类B的构造函数为A类的B类成员提供类内初始化程序。根据C ++ 11,完成所有这些的最佳方法是什么? ?
我尝试从标准本身找到解决方案,但未能找到这种情况的提及。如果有人能指出我,我会很高兴。
PS我真的是初学者,所以请不要在你的答案中另有假设。我不介意详细解答:)
答案 0 :(得分:0)
您应该阅读有关此问题的MSDN文章: Class Member Functions and Classes as Friends
基本上你需要做的是拥有一个带有函数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