


这个为什么后面一个可以访问私有前面那个就不行呢,友元函数应该写的没有问题啊,还请帮忙看看是什么情况
声明的友元类的意思是友元类可以访问当前类的私有成员。
给你提供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);
}

第二种是友元函数:
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);
}
