我们的家都有有客厅和卧室,客厅可以给所有人进,但是卧室只能给好基友进。
怎么样才能让家类外的好基友能有权限访问类内的私有空间卧室呢。
这就要用到友元friend关键字了。
下面用代码做示范:
1.首先创建一个Home类代表我们的家,再给它添加一个公共属性客厅,和一个私有属性卧室。
class Home
{
public://我家客厅是公共空间,所有人都能访问
string m_SittingRoom;
private://我家卧室是私人空间,只给好朋友访问
string m_BedRoom;
public:
Home()
{
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
};
2.设计一个好基友访问我们家的全局函数。
可以看到好基友想访问我们的卧室时,程序报错了,说Home类中的私有属性卧室不可访问。所以我们需要给好基友全局函数一个访问私有属性的权限。
3.在Home类定义时,添加friend void GoodGay(Home &h);告诉编译器GoodGay函数是我们Home类的朋友,给他访问权限。
class Home
{
friend void GoodGay(Home &h);
public://我家客厅是公共空间,所有人都能访问
string m_SittingRoom;
private://我家卧室是私人空间,只给好朋友访问
string m_BedRoom;
public:
Home()
{
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
};
这样一来,好基友就可以访问我们的卧室啦。
同理friend也可以给其他类/成员函数访问权限,用法也是friend+其他类/成员函数的声明。如:
friend class GoodGay;
friend void GoodGay::visit();