友元
在程序里,有些私有属性,但是想让类外特殊的一些函数或者类型进行访问,就需要用到友元。
所以,友元就是让一个函数或者类作为另一个类的(朋友),来访问该类的私有成员。
关键字 friend
友元的三种实现:
1 全局函数做友元
2 类做友元
3 成员函数做友元
1 全局函数做友元
此时在类中 此处加上 如图
2 类做友元
(此处使用了构造函数的类外表示)
//个人空间类
class Building;
//好朋友类
class goodFriend
{
public:
goodFriend();
void visit();//访问Building中的属性
private:
Building* building;
};
//建筑物类
class Building
{
//goodFriend是本类的firend 可以访问私有成员
friend class goodFriend; //关键语句
public:
Building();//构造函数的类外表示
public:
string m_SittingRoom;
private:
string m_BedRoom;
};
Building::Building()//Building构造函数的类外表示
{
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
goodFriend::goodFriend()//goodFriend构造函数的类外表示
{
//创建一个建筑物的对象
building = new Building;//堆区创建对象
//让building指向该对象
}
void goodFriend::visit()
{
cout << "好朋友正在访问:" << building->m_SittingRoom << endl;
cout << "好朋友正在访问:" << building->m_BedRoom << endl;
}
void test01()
{
goodFriend gf;
gf.visit();
}
int main()
{
test01();
system("pause");
return 0;
}
- 成员函数做友元
class Building;
class GoodFriend
{
public:
GoodFriend();//构造函数
void visit();//访问Building的私有内容
void visit2();//不可访问Building的私有成员
Building* building; //维护building指针
};
class Building
{
//告诉编译器 GoodFriend类下的visit成员函数
//作为本类的friend 可以访问私有成员
friend void GoodFriend::visit();
friend void GoodFriend::visit2();
public:
Building();
public:
string m_SittingRoom;
private:
string m_BedRoom;
};
Building::Building()
{
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
GoodFriend::GoodFriend()
{
building = new Building;
//new(创建)Building对象在堆区,
//且用指针buiding维护Building
}
void GoodFriend::visit()
{
cout << "visit函数正在访问"<<building->m_SittingRoom << endl;
}
void GoodFriend::visit2()
{
cout << "visit2函数正在访问" << building->m_SittingRoom << endl;
cout << "visit2函数正在访问" << building->m_BedRoom << endl;
}
void test01()
{
GoodFriend gf;
gf.visit();
gf.visit2();
}
int main()
{
test01();
system("pause");
return 0;
}