友元
友元的目的就是让一个函数或者类 访问另一个类中私有成员
友元的关键字是 friend
友元的三种实现:
1.全局函数做友元
2.类做友元
3.成员函数做友元
1.全局函数做友元:
#include <iostream>
//全局函数做友元
using namespace std;
class Building
{
friend void GoodFrd(Building *building);//全局函数放到类中 前面再加friend 这个全局函数就能访问私有成员
public:
Building()
{
m_SittingRoom="客厅";
m_BedRoom="卧室";
}
public:
string m_SittingRoom;
private:
string m_BedRoom;
};
//全局函数
void GoodFrd(Building *building)
{
cout<<"好朋友的全局函数访问"<<building->m_SittingRoom<<endl;
cout<<"好朋友的全局函数访问"<<building->m_BedRoom<<endl;
}
int main()
{
Building building;
GoodFrd(&building);
}
2.类做友元:
#include <iostream>
//类做友元
using namespace std;
class Building
{
friend class GoodFrd;
public:
Building();
public:
string m_SittingRoom;
private:
string m_BedRoom;
};
class GoodFrd
{
public:
GoodFrd();
void visit();//访问Building中的属性
public:
Building * building;
};
GoodFrd::GoodFrd()
{
building=new Building;
}
void GoodFrd::visit()
{
cout<<"正在访问"<<building->m_SittingRoom<<endl;
cout<<"正在访问"<<building->m_BedRoom<<endl;
}
Building::Building()
{
m_SittingRoom="客厅";
m_BedRoom="卧室";
}
void test01()
{
GoodFrd GF;
GF.visit();
}
int main()
{
test01();
}
3.成员函数做友元:
#include <iostream>
//成员函数做友元
using namespace std;
class Building;
class GoodFrd
{
public:
GoodFrd();
void visit01();//访问Building中的私有成员
void visit02();//不可以访问私有成员
public:
Building * building;
};
class Building
{
friend void GoodFrd::visit01();//让GoodFrd中的visit01可以访问私有成员
public:
Building();
public:
string m_SittingRoom;
private:
string m_BedRoom;
};
GoodFrd::GoodFrd()
{
building=new Building;
}
void GoodFrd::visit01()
{
cout<<"正在访问"<<building->m_SittingRoom<<endl;
cout<<"正在访问"<<building->m_BedRoom<<endl;
}
void GoodFrd::visit02()
{
cout<<"2正在访问"<<building->m_SittingRoom<<endl;
//cout<<"2正在访问"<<building->m_BedRoom<<endl;
}
Building::Building()
{
m_SittingRoom="客厅";
m_BedRoom="卧室";
}
void test01()
{
GoodFrd GF;
GF.visit01();
GF.visit02();
}
int main()
{
test01();
}