关于友元函数无法访问私有成员

img

img

img


这个为什么后面一个可以访问私有前面那个就不行呢,友元函数应该写的没有问题啊,还请帮忙看看是什么情况

声明的友元类的意思是友元类可以访问当前类的私有成员。
给你提供2中写法,一种是使用友元类:

class Boy
{
public:
    Boy(string name,int age)
    {
        m_name=name;
        m_age=age;
    }
    friend class Girl;

private:
    string m_name;
    int m_age=0;

};

class Girl
{
public:
    Girl(string name,int age)
    {
        m_name=name;
        m_age=age;
    }

    void VisitBoyAndGirl(Girl girl,Boy boy)
    {
        cout<<"boy name ="<<boy.m_name<<endl;
        cout<<"boy age ="<<boy.m_age<<endl;
        cout<<"girl name ="<<girl.m_name<<endl;
        cout<<"girl age ="<<girl.m_age<<endl;
    }
private:
    string m_name;
    int m_age=0;

};
int main()
{
    Girl girl("xiaoli",20);
    Boy boy("xiaoming",23);
    girl.VisitBoyAndGirl(girl,boy);
}

img

第二种是友元函数:

class Girl;  //事先声明girl是一个类

class Boy
{
public:
    Boy(string name,int age)
    {
        m_name=name;
        m_age=age;
    }
    friend void VisitBoyAndGirl(Girl girl,Boy boy);

private:
    string m_name;
    int m_age=0;

};

class Girl
{
public:
    Girl(string name,int age)
    {
        m_name=name;
        m_age=age;
    }

    friend void VisitBoyAndGirl(Girl girl,Boy boy)
    {
        cout<<"boy name ="<<boy.m_name<<endl;
        cout<<"boy age ="<<boy.m_age<<endl;
        cout<<"girl name ="<<girl.m_name<<endl;
        cout<<"girl age ="<<girl.m_age<<endl;
    }
private:
    string m_name;
    int m_age=0;

};
int main()
{
    Girl girl("xiaoli",20);
    Boy boy("xiaoming",23);
    VisitBoyAndGirl(girl,boy);
}

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632