生活中你的家有客厅(public),有你的卧室(private)。客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去,但是呢,你也可以允许你的好闺蜜好基友进去。
在程序里,有些私有属性,也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。
友元的目的就是让一个函数或者类访问另一个类中私有成员。
友元的关键字:friend
友元的三种实现:
1.全局函数做友元。
2.类做友元
3.成员函数做友元
1.全局函数做友元。
class Building{
//全局函数做友元
friend void goodFriend(Building *building)
public:
string m_SittingRoom//客厅
private:
string m_BedRoom//卧室
public:
Building(){
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
};
//全局函数
void goodFriend(Building *building){
cout <<"好朋友正在访问:"<<building.m_SittingRoom<<endl;
//类外不可以访问私有
//除非在类中声明了该函数是友元,就可以访问
cout <<"好朋友正在访问:"<<building.m_BedRoom<<endl;
}
void test01(){
Building building;
goodFrined(&building);
}
int main(){
test01();//输出:好朋友正在访问 客厅
}
2.类做友元
class Building{
//类作为友元
friend class GoodGay;
public:
string m_SittingRoom//客厅
private:
string m_BedRoom//卧室
public:
Building();
};
//类外写成员函数
Building::Building(){
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
class GoodGay{
public:
Building *building;
GoodGay();
void visit();//参观函数 访问Building中的属性
};
//类外写成员函数
GoodGay::GoodGay(){
//创建建筑物对象
building = new building;
}
void GoodGay::visit(){
cout <<"好基友正在访问:"<<building->m_SittingRoom<<endl;
cout <<"好基友正在访问:"<<building->m_BedRoom<<endl;
}
void test01(){
GoodGay hh;
hh.vist();
}
3.成员函数做友元
class Building{
//成员函数做友元
friend void GoodGay::visit();
public:
string m_SittingRoom//客厅
private:
string m_BedRoom//卧室
public:
Building(){
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
};
class GoodGay{
public:
Building *building;
GoodGay(){
//building指针new一个building对象
building = new building
}
void visit(){//让visit函数可以访问Building中私有成员
cout <<"visit函数正在访问:"<<building.m_SittingRoom<<endl;//可以访问
cout <<"visit函数正在访问:"<<building.m_BedRoom<<endl;//不可以访问
}
void visit2(){//让visit2函数不可以访问Building中私有成员
cout <<"visit函数正在访问:"<<building.m_SittingRoom<<endl;//可以访问
cout <<"visit函数正在访问:"<<building.m_BedRoom<<endl;//不可以
}
}
void main(){
GoodGay gg;
gg.visit();
}