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 }
运行结果:
(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)