例如这个班级。非成员函数是否有可能执行友元函数的任务?
class Accumulator
{
private:
int m_nValue;
public:
Accumulator() { m_nValue = 0; }
void Add(int nValue) { m_nValue += nValue; }
// Make the Reset() function a friend of this class
friend void Reset(Accumulator &cAccumulator);
};
// Reset() is now a friend of the Accumulator class
void Reset(Accumulator &cAccumulator)
{
// And can access the private data of Accumulator objects
cAccumulator.m_nValue = 0;
}
答案 0 :(得分:4)
哦,我的,这听起来像是家庭作业:一个人为的问题,答案是你必须知道才能提出这个问题。
首先,请注意friend
函数是非成员,因为它不是成员。
反正
void Reset( Accumulator& a )
{
a = Accumulator();
}
答案 1 :(得分:1)
非成员非朋友功能无法访问或修改私有数据成员。您是否有理由不想将void Reset(){m_nValue = 0;}的成员函数提供给类的公共接口?
答案 2 :(得分:0)
如果您的意思是访问该类的私有成员,则无法完成。如果你想要一个非成员的非朋友函数,它在这种特殊情况下做同样的事情Reset
,这应该有效:
void notFriendReset(Accmulator& acc)
{
acc = Accmulator();
}