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 */
本文来自博客园,作者:Bytezero!,转载请注明原文链接:https://www.cnblogs.com/Bytezero/p/15111437.html