友元
友元是什么
在类中,某些私有属性也想让类外的一些特殊函数或者类进行访问,就需要用到友元的技术。
友元的目的,就是让一个函数或者类可以访问另一个类的私有成员属性。
friend 关键字
1.全局函数做友元
#include <iostream>
using namespace std;
#include <string>
struct Person
{
friend void func(Person &p);
public:
Person(string name, string room)
{
m_name = name;
m_room = room;
}
public:
string m_name;
private:
string m_room;
};
//全局函数
// 作为友元函数,可以访问Person对象中的私有属性
void func(Person &p)
{
cout << "正在访问:" << p.m_name << endl;
cout << "正在访问:" << p.m_room << endl;
}
void test()
{
Person p("李四", "大房子");
func(p);
}
int main()
{
test();
return 0;
}
2.类做友元
#include <iostream>
using namespace std;
#include <string>
class GoodFriend;
class Person
{
public:
Person();
GoodFriend *gf;
public:
void visit();
};
class GoodFriend
{
friend class Person;
public:
GoodFriend(string name, string room) : m_name(name), m_room(room) {}
public:
string m_name;
private:
string m_room;
};
Person::Person()
{
gf = new GoodFriend("李四", "私人大房子");
}
void Person::visit()
{
cout << "某个人正在访问好朋友 " << gf->m_name << endl;
cout << "某个人正在访问好朋友的 " << gf->m_room << endl;
}
void test()
{
Person p;
p.visit();
}
int main()
{
test();
return 0;
}
3.成员函数做友元
#include <iostream>
using namespace std;
#include <string>
class GoodFriend;
class Person
{
public:
Person();
GoodFriend *gf;
public:
void visit();
void visit2();
};
class GoodFriend
{
friend void Person::visit();
public:
GoodFriend(string name, string room) : m_name(name), m_room(room) {}
public:
string m_name;
private:
string m_room;
};
Person::Person()
{
gf = new GoodFriend("李四", "私人大房子");
}
void Person::visit()
{
cout << "某个人正在访问好朋友 " << gf->m_name << endl;
cout << "某个人正在访问好朋友的 " << gf->m_room << endl;
}
void Person::visit2()
{
cout << "某个人正在访问好朋友 " << gf->m_name << endl;
// cout << "某个人正在访问好朋友的 " << gf->m_room << endl;
}
void test()
{
Person p;
p.visit();
p.visit2();
}
int main()
{
test();
return 0;
}