在程序里,有些私有属性,也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术
友元的目的就是让一个函数或者类,访问另一个类私有成员
友元的关键字为friend
一.友元的三种实现
(一)全局函数友元
正常来说,在类外无法访问到私有函数会报错
但是如果在类内的最上层添加全局函数友元,就直接可以实现访问私有函数
基本语法:friend 想要获得权限的函数的头,
就比如下面的
friend void goodGay(building *building);
效果图:
(二)类做友元
class Building;
class goodGay
{
public:
goodGay();
void visit();//参观函数,访问building中的属性
private:
Building *building;
};
class Building
{
public:
Building();
public:
string m_SittingRoom; //客厅
private:
string m_BedRoom;//卧室
};
//类外写成员函数需要写命名空间确保函数的调用
Building::Building()
{
this->m_SittingRoom = "客厅";
this->m_BedRoom = "卧室";
}
goodGay::goodGay()
{
building = new Building;
}
void goodGay::visit()
{
cout << "好基友正在访问" << building->m_SittingRoom << endl;
//cout << "好基友正在访问" << building->m_BedRoom << endl;
}
void test01()
{
goodGay gg;
gg.visit();
}
int main(){
test01();
system("pause");
return 0;
}
目前函数构造
但是我们去掉注释,访问私有成员变量m_bedroom便会报错
因此,我们在building声明goodGay为友元,就能够实现从类访问私有变量
(三)成员函数做友元
同样是上述代码,但我们不用类去整体访问,采用成员函数作为友元作为访问,也可以完成访问
由于此方法调用十分严格,顺序格式等不能出错,因此极其不推荐使用此方法