私有嵌套类中的友元
Friend within private nested class
我有两个私有嵌套类,它们需要访问另一个类中的私有成员。我想把需要访问私有成员的类作为朋友放在被访问的类中,但我遇到了一个错误,即A::m_Data是私有的,所以我无法访问它。不管怎样,告诉编译器我需要访问D::DoSomething()中的A::m_Datas私有成员?
以下是我尝试做的一个示例:
文件A.h
class A
{
class D;
public:
A();
~A() {}
private:
friend class D;
int m_nData;
};
文件A.cpp:
#include "A.h"
#include "B.h"
A::A()
: m_nData(0)
{
}
文件B.h:
#include "A.h"
class B
{
public:
B() {}
~B() {}
private:
class C
{
public:
C(A* pA): m_pA(pA) {}
virtual ~C() {}
virtual void DoSomething() {}
protected:
A* m_pA;
};
class D: public C
{
public:
D(A* pA): C(pA) {}
virtual ~D() {}
virtual void DoSomething()
{
m_pA->m_nData++;
};
};
};
这里需要两份友谊一个用于让A
知道私有B::D
,另一个用于允许B::D
访问A
中的私有数据。
在声明A类之前声明(包括)类B。
然后在class B
中添加:
friend class A;
这允许类A知道私有B::D
。
然后在class A
中,替换:
friend class D;
带有:
friend class B::D;
相关文章:
- 如何在嵌套类中正确使用友元声明?
- 在为嵌套类定义行外友元时,我真的必须打破封装吗?
- 筛选嵌套的动态元组(元组的动态元组)
- 以嵌套类为参数的友元模板声明
- 模板化类的嵌套类中的友元运算符
- 使用标准库在 c++11 中使用 std::tie 提取嵌套在元组中的元组
- 嵌套友元类所需的前向声明
- const_iterator:嵌套类还是友语类?
- 如何使用来自友元函数的嵌套类?
- 为什么 Visual C++无法编译从私有嵌套类继承的友元模板
- 嵌套异常和基元类型
- 如何正确声明模板类的嵌套类的友元
- 友元类如何访问嵌套类的私有成员
- 嵌套类中需要前向声明的友元声明
- C++:特定于友元的对象(嵌套类)
- 私有嵌套类中的友元
- 如何声明一个接受模板类嵌套类的全局友元函数
- 友元方法不能访问嵌套类
- 具有嵌套命名空间内的友元函数的模板类
- 带有友元运算符的模板类的嵌套类,编译错误