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++;
}
};
考虑以下示例。
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++;
}
};