C++ 核心 "友元"
生活中你的家有客厅(Public),有你的卧室(Private)
客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去
但是呢,你也可以允许你的好闺蜜好基友进去。
在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术
友元的目的就是让一个函数或者类 访问另一个类中私有成员
友元的关键字为 ==friend==
友元的三种实现
-
全局函数做友元
-
类做友元
-
1 class home { 2 3 //告诉编译器girlfriend全局函数 是room的friend,可以访问类中的私有内容。 4 friend void girlfriend(home &room); 5 public: 6 home() { 7 this->m_SittingRoom = "客厅"; 8 this->m_BedRoom = "卧室"; 9 } 10 11 public: 12 string m_SittingRoom; //客厅 13 private: 14 string m_BedRoom; //卧室 15 }; 16 17 //&引用 用.访问; *指针用->访问 18 void girlfriend(home &room){ 19 cout << "女朋友(全局函数)在我家:" << room.m_SittingRoom << endl; 20 cout << "女朋友(全局函数)在我家:" << room.m_BedRoom << endl; 21 22 } 23 24 void test01(){ 25 home me; 26 girlfriend(me); 27 } 28 int main(){ 29 30 test01(); 31 system("pause"); 32 return 0; 33 }
2.类做友元(友元类)
1 class Building; 2 class Goodgay{ 3 4 public: 5 Goodgay(); 6 7 void visit();//参观函数 访问Building中的属性 8 Building *building; 9 }; 10 11 class Building{ 12 //Goodgay类是本类的好朋友,可以访问本类中的私有成员 13 friend class Goodgay; //★★★ 14 public: 15 Building(); 16 public: 17 string m_SittingRoom; 18 private: 19 string m_BedRoom; 20 }; 21 22 //类外写成员函数 23 Building::Building(){ 24 25 this->m_BedRoom = "卧室"; // 26 m_SittingRoom = "客厅"; 27 } 28 //类外写成员函数 29 Goodgay::Goodgay(){ 30 //创建建筑物对象 31 building = new Building; //类里面的指针一定要分配内存 32 33 } 34 35 void Goodgay::visit(){ 36 cout << "好基友正在访问:" << building->m_SittingRoom << endl; 37 cout << "好基友正在访问:" << building->m_BedRoom << endl; 38 39 } 40 41 void test01(){ 42 Goodgay p1; 43 p1.visit(); 44 } 45 46 int main(){ 47 48 test01(); 49 system("pause"); 50 return 0; 51 }
3.成员函数做友元
class Building; class Goodgay{ public: Goodgay(); void visit1(); //让visit1函数可以访问到building中的私有成员 void visit2(); //让visit2函数不可以访问到building中的私有成员 Building *building; }; class Building{ //friend class Goodgay; //类做友元 //告诉编译器 Goodgay类下的visit成员函数作为本类的好朋友,可以访问私有成员 friend void Goodgay::visit1(); //成员函数做友元 public: Building(); public: string m_Sittingroom; private: string m_Bedroom; }; //类外实现所有成员函数 Building::Building(){ this->m_Sittingroom = "客厅"; m_Bedroom = "卧室"; } Goodgay::Goodgay(){ building = new Building; } void Goodgay::visit1(){ cout << "visit1 函数正在访问:" << building->m_Sittingroom << "\n" << endl; cout << "visit1 函数正在访问:" << building->m_Bedroom << "\n" << endl; } void Goodgay::visit2(){ cout << "visit2 函数正在访问:" << building->m_Sittingroom << endl; //cout << "visit2 函数正在访问:" << building->m_Bedroom << endl; } void test01(){ Goodgay p1; p1.visit1(); p1.visit2(); } int main(){ test01(); system("pause"); return 0; }
本文来自博客园,作者:xiaoxie001,转载请注明原文链接:https://www.cnblogs.com/xiaoxie001/p/16162636.html