C++ 友元 (全局函数做友元) (类做友元) (成员函数做友元)

  1 //友元  全局函数做友元
  2 /*
  3 #include <iostream>
  4 #include <string>
  5 using namespace std;
  6 
  7 //建筑物类
  8 class Building
  9 {
 10 
 11     //GoodGay全局函数 是 Building好朋友 可以访问 Building中私有成员
 12     friend void GoodGay(Building& building);
 13 
 14 public:
 15     Building()           //构造函数 赋初值
 16     {
 17         m_SittingRoom = "客厅";
 18         m_BedRoom = "卧室";
 19     }
 20 
 21 public:
 22     string m_SittingRoom;    //客厅
 23 
 24 private:
 25     string  m_BedRoom;     //卧室
 26 };
 27 
 28 //全局函数
 29 void GoodGay(Building &building)
 30 {
 31     cout << "好基友全局函数 正在访问 :" << building.m_SittingRoom << endl;
 32 
 33 
 34     cout << "好基友全局函数 正在访问 :" << building.m_BedRoom << endl;
 35 
 36 }
 37 
 38 void test01()
 39 {
 40     Building building;   //实例化
 41     GoodGay(building);
 42 }
 43 int main()
 44 {
 45     test01();
 46 }
 47 */
 48 
 49 
 50 
 51 //类做友元
 52 /*
 53 #include <iostream>
 54 #include <string>
 55 using namespace std;
 56 
 57 class Building;
 58 
 59 class GoodGay
 60 {
 61 public:
 62     GoodGay();
 63 
 64     void visit();    //参观函数  访问 Building中的熟悉
 65 
 66     Building* building;
 67 };
 68 
 69 class Building
 70 {
 71 
 72     //goodgay类是Building 的好朋友 可以访问本类中的私有成员
 73     friend class GoodGay;
 74 
 75 public:
 76     Building();
 77 
 78 public:
 79     string m_SittingRoom; //客厅
 80 
 81 
 82 private:
 83     string m_BedRoom;    //卧室
 84 
 85 };
 86 
 87 //类外去写成员函数
 88 Building::Building()
 89 {
 90     m_SittingRoom = "客厅";
 91     m_BedRoom = "卧室";
 92 }
 93 GoodGay::GoodGay()
 94 {
 95     //创建建筑物对象
 96     building = new Building;
 97 
 98 }
 99 void GoodGay:: visit()
100 {
101     cout << "好基友类正在访问 :" << building->m_SittingRoom << endl;
102 
103     cout << "好基友类正在访问 :" << building->m_BedRoom << endl;
104 }
105 
106 void test01()
107 {
108     GoodGay gg;
109     gg.visit();
110 }
111 int main()
112 {
113     test01();
114 }
115 */
116 
117 
118 
119 //成员函数做友元
120 /*
121 #include <iostream>
122 #include <string>
123 using namespace std;
124 
125 class Building;
126 class GoodGay
127 {
128 public:
129 
130     GoodGay();
131 
132 
133  
134     //让visit 函数可以访问Building中私有成员
135     void visit(); 
136 
137     //让visi2函数  不可以访问Building中私有成员
138     void visit2();  
139 
140     Building* building;
141 
142 
143 
144 };
145 
146 class Building
147 {
148     //告诉编译器 GoodGay类下的visit 成员函数作为本类的好朋友
149     //可以访问私有成员
150 
151     friend void GoodGay:: visit();
152 
153 public:
154 
155     Building();
156 
157 public:
158 
159     string m_SittingRoom;  //客厅
160 
161 private:
162 
163     string m_BedRoom;      //卧室
164 };
165 
166 //类外实现函数初始化
167 Building::Building()
168 {
169     m_SittingRoom = "客厅";
170     m_BedRoom = "卧室";
171 }
172 GoodGay::GoodGay()
173 {
174     building = new Building;
175 }
176 
177 //让visit 函数可以访问Building中私有成员
178 void GoodGay:: visit()
179 {
180     cout << "visit 函数 正在访问 : " << building->m_SittingRoom << endl;
181 
182     cout << "visit 函数 正在访问 : " << building->m_BedRoom << endl;
183 }
184 
185 //让visi2函数  不可以访问Building中私有成员
186 void GoodGay:: visit2()
187 {
188     cout << "visit2 函数 正在访问 : " << building->m_SittingRoom << endl;
189 
190     //cout << "visit 函数 正在访问 : " << building->m_BedRoom << endl;
191 
192 }
193 
194 void test01()
195 {
196     GoodGay gg;
197     gg.visit();
198     gg.visit2();
199 }
200 
201 int main()
202 {
203     test01();
204 }
205 */

 

posted on 2021-08-07 11:32  Bytezero!  阅读(150)  评论(0编辑  收藏  举报