C++ 一些学习笔记(九)类和对象-友元
主要是针对之前学习C的时候一些知识点的遗漏的补充,还有一些我自己觉得比较重要的地方。
本文章的主要内容是关于友元。
在程序里有些私有属性也想让类外特殊的一些函数或者类进行访问,就需要用到友元。
友元的目的就是让一个函数或者类访问另一个类中的私有成员。
关键字:friend
友元的三种实现:
- 全局函数做友元
- 类做友元
- 成员函数做友元
1.全局函数做友元
class Buliding{
friend void goodGuy(Building *buliding);//全局函数做友元
public:
Building(){
m_SittingRoom="客厅";
m_BedRoom="卧室";
}
public:
string m_SittingRoom;
private:
string m_BedRoom;
}
void goodGuy(Building *buliding){
cout<<"好朋友全局函数正在访问:"<<building->m_SittingRoom<<endl;
cout<<"好朋友全局函数正在访问:"<<building->m_BedRoom<<endl;
}
void test01(){
Building building;
goodGuy(&building);
}
2.类做友元
class Building;
class GoodGuy(){
public:
void visit();
Building *building;
};
class Buliding{
friend class GoodGuy;//GoodGuy类是本类的友元,可以访问本类中私有成员
public:
string m_SittingRoom;
private:
string m_BedRoom;
};
类外写成员函数
Building::Building(){
m_SittingRoom="客厅";
m_BedRoom="卧室";
}
GoodGuy::GoodGuy(){
//创建建筑物对象
building=new Building;
}
void GoodGay::visit(){
cout<<"好朋友类正在访问:"<<building->m_SittingRoom<<endl;
cout<<"好朋友类正在访问:"<<building->m_BedRoom<<endl;
}
void test01(){
GoodGuy gg;
gg.visit();
}
3.成员函数做友元
class Building;
class GoodGay{
public:
GoodGay();
void visit();//让visit可以访问building中私有的成员
void visit2();//让visit2不可以访问building中私有的成员
Building *building;
};
class Building{
friend void GoodGuy::visit();//告诉编译器GoodGuy类下成员函数作为本类的友元,可以访问私有成员
public:
Building();
pubilc:
string SittingRoom;
privite:
string BedRoom;
};
//类外实现成员函数
Building::Building(){
m_SittingRoom="客厅";
m_BedRoom="卧室";
}
GoodGuy::GoodGuy(){
building=new Building;
}
void GoodGuy::visit(){
cout<<"visit函数正在访问:"<<building->m_SittingRoom<<endl;
cout<<"visit2函数正在访问:"<<building->m_BedRoom<<endl;
}
void GoodGuy::visit2();{
cout<<"visit函数正在访问:"<<building->m_SittingRoom<<endl;}
void test01(){
GoodGuy gg;
gg.visit();
gg.visit2();
}