友元
在c++中,友元就相当于类的好朋友,成员函数的好朋友,全局函数的好朋友,好朋友可以做什么呢?好朋友可以知道你的一些别人不可以知道的小秘密。在程序里,有些私有成员属性也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。友元的目的就是让一个函数或者类 访问另一个类中私有成员
友元的三种实现方式
- 友元全局函数
- 友元成员函数
- 友元类
全局函数做友元
全局函数做友元可以访问类中的私有成员
class Building
{
//告诉编译器 goodGay全局函数 是 Building类的好朋友,可以访问类中的私有内容
friend void goodGay(Building * building);
public:
Building()
{
this->m_SittingRoom = "客厅";
this->m_BedRoom = "卧室";
}
public:
string m_SittingRoom; //客厅
private:
string m_BedRoom; //卧室
};
//全局函数
void goodGay(Building * building)
{
cout << "好基友正在访问: " << building->m_SittingRoom << endl;
//由于声明了友元全局函数,所以可以访问类的私有成员
cout << "好基友正在访问: " << building->m_BedRoom << endl;
}
void test01()
{
Building b;
goodGay(&b);
}
int main(){
test01();
system("pause");
return 0;
}
测试结果:
类做友元
类做友元那么该类就可以访问另一个类的私有成员属性。
class Building
{
//告诉编译器 goodGay类是Building类的好朋友,可以访问到Building类中私有内容
friend class goodGay;
public:
Building()
{
this->m_SittingRoom = "客厅";
this->m_BedRoom = "卧室";
}
public:
string m_SittingRoom; //客厅
private:
string m_BedRoom;//卧室
};
class goodGay
{
public:
goodGay()
{
building = new Building;
}
void visit()
{
cout << "好基友正在访问" << building->m_SittingRoom << endl;
//访问了Building类中的私有属性
cout << "好基友正在访问" << building->m_BedRoom << endl;
}
private:
Building *building;
};
void test01()
{
goodGay gg; // 创建goodGay类的对象
gg.visit();
}
int main(){
test01();
system("pause");
return 0;
}
成员函数做友元
成员函数做友元就是仅仅让一个类中的成员函数可以访问另一个类中私有成员。
class Building
{
//告诉编译器 goodGay类是Building类的好朋友,可以访问到Building类中私有内容
friend void goodGay:: visit();
public:
Building()
{
this->m_SittingRoom = "客厅";
this->m_BedRoom = "卧室";
}
public:
string m_SittingRoom; //客厅
private:
string m_BedRoom;//卧室
};
class goodGay
{
public:
goodGay()
{
building = new Building;
}
void visit()
{
cout << "好基友正在访问" << building->m_SittingRoom << endl;
//访问了Building类中的私有属性
cout << "好基友正在访问" << building->m_BedRoom << endl;
}
private:
Building *building;
};
void test01()
{
goodGay gg; // 创建goodGay类的对象
gg.visit();
}
int main(){
test01();
system("pause");
return 0;
}