c++ 如何正确声明另一个 class 的朋友 class 方法

c++ how to properly declare friend class method of another class

考虑以下示例。

class A
{
    int member;
};

class B
{
    A& a_ref;
    void manipulate()
    {
        a_ref.member++;
    }
};

现在,显然,B::manipulate 无法访问 a_ref。我想允许(仅)class B 获得(参考)A::member。我知道存在 friend 关键字,但我不知道如何正确使用它。我的意图是,我可以将 B::manipulate 实现更改为这个

int& A::only_B_can_call_this() // become friend of B somehow
{
    return member;
}

void B::manipulate()
{
    a_ref.only_B_can_call_this()++;
}

B 朋友:

class A
{
    int member;
    friend /*class*/ B;  // class is optional, required if B isn't declared yet
};

请注意 friend 是反模式 - 如果某些内容是 private,则可能不应访问它。你想达到什么目的?为什么 A 不是独立的?为什么另一个 class 需要访问其内部数据?

如果您对这些问题有效 answers/reasons,请使用朋友。

您只需将 friend class <class_name>; 添加到想要使其成员可访问的 class,其中 <class_name> 是您想要提供访问权限的 class 的名称对于.

class A
{
    friend class B; // allow class B to access private members of A
    int member;
};

class B
{
    A& a_ref;
    void manipulate()
    {
        a_ref.member++;
    }
};