友元的作用在让另一个函数或类,可以访问私有成员,有三种形式
- 全局函数作友元
- 类作友元
- 成员函数作友元
全局函数作友元
#include <iostream>#include <string>using namespace std;class Room{friend void toSleep();//声明全局函数toSleep可以返回Room私有函数及变量//私有函数private:void bedRoom(){cout << "in bedroom" << endl;}};void toSleep(){Room room;room.bedRoom();//可以正常调用}int main(){toSleep();return 0;}
类作友元
#include <iostream>#include <string>using namespace std;class Room{friend class People;//声明People为友元//私有函数private:void bedRoom(){cout << "in bedroom" << endl;}};class People{public:void sleep(){Room r;r.bedRoom();}};
类成员函数作友元
#include <iostream>#include <string>using namespace std;class People;class Room;class People{public:void sleep();};class Room{friend void People::sleep();void bedRoom();};void People::sleep(){Room room;room.bedRoom();}void Room::bedRoom(){cout << "in bedroom" << endl;}int main(){People p;p.sleep();return 0;}
