• 20240417,友元 FRIEND


    ··················本来要学习的吃瓜吃了一下午

    目录

    3.1 全局函数做友元

    3.2 友元类

    3.3 成员函数做友元

    三,友元

    3.1 全局函数做友元
    1. #include<iostream>
    2. using namespace std;
    3. class Building
    4. {
    5. friend void goodGay(Building* building);
    6. //好朋友,可以访问buiding的全部成员
    7. public:
    8. Building()
    9. {
    10. m_SittingRoom = "客厅";
    11. m_BedRoom = "卧室";
    12. }
    13. string m_SittingRoom;
    14. private:
    15. string m_BedRoom;
    16. };
    17. void goodGay(Building *building)
    18. {
    19. cout << "好基友的全局函数 正在访问:" << building->m_SittingRoom << endl;
    20. cout << "好基友的全局函数 正在访问:" << building->m_BedRoom << endl;
    21. }
    22. void test01()
    23. {
    24. Building bding;
    25. goodGay(&bding);
    26. }
    27. int main()
    28. {
    29. test01();
    30. system("pause");
    31. return 0;
    32. }
    3.2 友元类
    1. #include<iostream>
    2. #include<string>
    3. using namespace std;
    4. class Building;
    5. class Goodgay
    6. {
    7. public:
    8. Goodgay();
    9. void visit();//参观函数,访问BUIDING中的属性
    10. Building * building;
    11. };
    12. class Building
    13. {
    14. friend Goodgay;//GoodGAY类是BUILDING类的好朋友,可以访问BUILDING的私有成员
    15. public:
    16. Building();
    17. string m_SittingRoom;
    18. private:
    19. string m_BedRoom;
    20. };
    21. Building::Building()//类外写成员函数
    22. {
    23. m_SittingRoom = "客厅";
    24. m_BedRoom = "卧室";
    25. }
    26. Goodgay::Goodgay()
    27. {
    28. //创建一个建筑物的对象
    29. building = new Building;//堆区创建一个BUILDING的对象
    30. //构造函数解决初始化问题,所以?这是初始化?*building指向这个堆区对象
    31. }
    32. void Goodgay::visit()
    33. {
    34. cout << "好基友类正在访问:" << building->m_SittingRoom << endl;
    35. cout << "好基友类正在访问:" << building->m_BedRoom << endl;
    36. }
    37. void test01()
    38. {
    39. Goodgay gg;
    40. gg.visit();
    41. }
    42. int main()
    43. {
    44. test01();
    45. system("pause");
    46. return 0;
    47. }
    3.3 成员函数做友元
    1. #include<iostream>
    2. #include<string>
    3. using namespace std;
    4. class Building;
    5. class Goodgay
    6. {
    7. public:
    8. Goodgay();
    9. void visit();//可以访问Buiding私有
    10. void visit01();//不可以访问Buiding私有
    11. Building * building;
    12. };
    13. class Building
    14. {
    15. //friend void visit();这种写法会将VISIT识别为一个全局函数,而不是Goodgay中的成员函数
    16. friend void Goodgay::visit();
    17. public:
    18. Building();
    19. string m_SittingRoom;
    20. private:
    21. string m_BedRoom;
    22. };
    23. Building::Building()//类外写成员函数
    24. {
    25. m_SittingRoom = "客厅";
    26. m_BedRoom = "卧室";
    27. }
    28. Goodgay::Goodgay()
    29. {
    30. //创建一个建筑物的对象
    31. building = new Building;//堆区创建一个BUILDING的对象,返回指针
    32. //构造函数解决初始化问题,所以?这是初始化?building指向这个堆区对象
    33. }
    34. void Goodgay::visit()
    35. {
    36. cout << "好基友类visit 正在访问:" << building->m_SittingRoom << endl;
    37. cout << "好基友类visit 正在访问:" << building->m_BedRoom << endl;
    38. }
    39. void Goodgay::visit01()
    40. {
    41. cout << "好基友类visit01 正在访问:" << building->m_SittingRoom << endl;
    42. //cout << "好基友类visit01 正在访问:" << building->m_BedRoom << endl;
    43. }
    44. void test01()
    45. {
    46. Goodgay gg;
    47. gg.visit();
    48. gg.visit01();
    49. }
    50. int main()
    51. {
    52. test01();
    53. system("pause");
    54. return 0;
    55. }

    想让谁访问,就让谁FRIEND

  • 相关阅读:
    ubuntu22.04安装公司安全VPN的方案
    C++之结构体以及通讯录管理系统
    又一国产摄像机发布
    Python数据分析11——Seaborn绘图
    一份Java学习笔记送给大家
    EasyV数字孪生流域|宁波智慧水利整体智治综合应用
    C++中HANDLE句柄的概念
    541.反转字符串
    Linux TCP 单机优化
    Javascript知识【jQuery:查找元素操作&案例:模拟用户分组】
  • 原文地址:https://blog.csdn.net/qq_51583806/article/details/137841227