私有嵌套类中的友元

Friend within private nested class

本文关键字:友元 嵌套      更新时间:2023-10-16

我有两个私有嵌套类,它们需要访问另一个类中的私有成员。我想把需要访问私有成员的类作为朋友放在被访问的类中,但我遇到了一个错误,即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;