友元的作用在让另一个函数或类,可以访问私有成员,有三种形式

  • 全局函数作友元
  • 类作友元
  • 成员函数作友元

全局函数作友元

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. class Room{
  5. friend void toSleep();//声明全局函数toSleep可以返回Room私有函数及变量
  6. //私有函数
  7. private:void bedRoom(){
  8. cout << "in bedroom" << endl;
  9. }
  10. };
  11. void toSleep(){
  12. Room room;
  13. room.bedRoom();//可以正常调用
  14. }
  15. int main()
  16. {
  17. toSleep();
  18. return 0;
  19. }

类作友元

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. class Room{
  5. friend class People;//声明People为友元
  6. //私有函数
  7. private:void bedRoom(){
  8. cout << "in bedroom" << endl;
  9. }
  10. };
  11. class People{
  12. public:void sleep(){
  13. Room r;
  14. r.bedRoom();
  15. }
  16. };

类成员函数作友元

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. class People;
  5. class Room;
  6. class People{
  7. public:void sleep();
  8. };
  9. class Room{
  10. friend void People::sleep();
  11. void bedRoom();
  12. };
  13. void People::sleep(){
  14. Room room;
  15. room.bedRoom();
  16. }
  17. void Room::bedRoom(){
  18. cout << "in bedroom" << endl;
  19. }
  20. int main()
  21. {
  22. People p;
  23. p.sleep();
  24. return 0;
  25. }