C++黑马程序员——P118-120. 友元

  • P118. 类和对象——友元——全局函数做友元
  • P119. 类和对象——友元——友元类
  • P120. 类和对象——友元——成员函数做友元
  • P118. 全局函数做友元

  

全局函数做友元:

 1 class Building
 2 {
 3     friend void GoodGay(Building& building);    //GoodGay()是Building的友元,可以访问Building中的私有成员
 4 public:
 5     Building()
 6     {
 7         m_SittingRoom = "客厅";
 8         m_BedRoom = "卧室";
 9     }
10     string m_SittingRoom;    //客厅
11 private:
12     string m_BedRoom;    //卧室
13 };
14 
15 //全局函数
16 void GoodGay(Building &building)
17 {
18     cout << "全局函数正在访问:" << building.m_SittingRoom << endl;
19     cout << "全局函数正在访问:" << building.m_BedRoom << endl;
20 }
21 
22 void test01()
23 {
24     Building b1;
25     GoodGay(b1);
26 }
27 
28 int main()
29 {
30     test01();
31     return 0;
32 }

 运行结果:

   

 

  • P119. 友元类

类做友元:

 1 //类做友元
 2 class Building;    //声明一个Building类
 3 class GoodGay
 4 {
 5 public:
 6     GoodGay();
 7     void visit();    //参观函数 访问Building中的属性
 8     Building* building;
 9 };
10 
11 class Building
12 {
13     //GoodGay是本类的 友元,可以访问本类中的 私有成员
14     friend class GoodGay;
15 public:
16     Building();
17     string m_SittingRoom;    //客厅
18 private:
19     string m_BedRoom;    //卧室
20 };
21 //类外写成员函数(不是规定,只是换一种写法)
22 Building::Building()
23 {
24     m_SittingRoom = "客厅";
25     m_BedRoom = "卧室";
26 }
27 
28 GoodGay::GoodGay()
29 {
30     //创建一个建筑物对象
31     building = new Building;
32 }
33 
34 void GoodGay::visit()  //注意 返回值 和 作用域 的先后顺序
35 {
36     cout << "友元类正在访问:" << building->m_SittingRoom << endl;
37     cout << "友元类正在访问:" << building->m_BedRoom << endl;
38 }
39 
40 void test01()
41 {
42     GoodGay g1;
43     g1.visit();
44 }
45 
46 int main()
47 {
48     test01();
49     return 0;
50 }

运行结果:

  

 

  • P120. 成员函数做友元
 1 class Building;
 2 class GoodGay
 3 {
 4 public:
 5     GoodGay();
 6     void visit();
 7     void visit2();
 8 private:
 9     Building* building;
10 };
11 
12 class Building
13 {
14     //告诉编译器 GoodGay类中的visit成员函数 是Building的友元 可以访问本类中的私有内容
15     friend void GoodGay::visit();
16 public:
17     Building();
18     string m_SittingRoom;
19 private:
20     string m_BedRoom;
21 };
22 
23 Building::Building()
24 {
25     m_SittingRoom = "客厅";
26     m_BedRoom = "卧室";
27 }
28 
29 GoodGay::GoodGay()
30 {
31     building = new Building;
32 }
33 
34 void GoodGay::visit()
35 {
36     cout << "visit 正在访问:" << building->m_SittingRoom << endl;
37     cout << "visit 正在访问:" << building->m_BedRoom << endl;
38 }
39 
40 void GoodGay::visit2()
41 {
42     cout << "visit2 正在访问:" << building->m_SittingRoom << endl;
43     //cout << "visit2 正在访问:" << building->m_BedRoom << endl;    //报错,visit2不是Building的友元
44 }
45 
46 void test01()
47 {
48     GoodGay g1;
49     g1.visit();
50     g1.visit2();
51 }
52 
53 int main()
54 {
55     test01();
56     return 0;
57 }

 运行结果:

  

(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)

posted @ 2023-02-20 19:55  我会变强的  阅读(45)  评论(0编辑  收藏  举报