非成员函数如何实现类的朋友功能呢?

时间:2014-09-21 03:22:58

标签: c++ oop

例如这个班级。非成员函数是否有可能执行友元函数的任务?

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;
}

3 个答案:

答案 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();
}