2026/1/13 0:09:18
网站建设
项目流程
做使用的网站有哪些,云系统网站建设合同,国外网站怎么进入,虎牙网页游戏大厅#x1f9d1;#x1f4bb; C 友元#xff08;friend#xff09;到底是什么#xff1f;好基友才能进卧室#xff01;
大家好#xff01;今天我们来聊一个 C 中既实用又有点“特别”的概念 —— 友元#xff08;friend#xff09;。
如果你刚学完封装、访问控制 C 友元friend到底是什么好基友才能进卧室大家好今天我们来聊一个 C 中既实用又有点“特别”的概念 ——友元friend。如果你刚学完封装、访问控制public / private可能会觉得“私有成员只能类内部访问那外面就完全不能碰了吗”别急C 给我们留了一扇“后门”——友元。它就像你家的卧室private虽然一般外人不能进但你可以特许你的好闺蜜、好基友进去 生活中的类比客厅public谁都能进。卧室private只有你自己能进。但如果你信任某个朋友你可以给他/她一把钥匙 —— 这就是友元在 C 中友元可以让某些特定的函数或类访问另一个类的私有private成员。关键字只有一个friend✨ 友元的三种实现方式1️⃣ 全局函数做友元class Building { //告诉编译器 goodGay全局函数 是 Building类的好朋友可以访问类中的私有内容 friend void goodGay(Building * building); public: Building() { this-m_SittingRoom 客厅; this-m_BedRoom 卧室; } public: string m_SittingRoom; //客厅 private: string m_BedRoom; //卧室 }; void goodGay(Building * building) { cout 好基友正在访问 building-m_SittingRoom endl; cout 好基友正在访问 building-m_BedRoom endl; } void test01() { Building b; goodGay(b); } int main(){ test01(); system(pause); return 0; }✅goodGay是一个普通函数但它被声明为Building的友元所以能直接访问m_BedRoom2️⃣ 类做友元class Building; class goodGay { public: goodGay(); void visit(); private: Building *building; }; class Building { //告诉编译器 goodGay类是Building类的好朋友可以访问到Building类中私有内容 friend class goodGay; public: Building(); public: string m_SittingRoom; //客厅 private: string m_BedRoom;//卧室 }; Building::Building() { this-m_SittingRoom 客厅; this-m_BedRoom 卧室; } goodGay::goodGay() { building new Building; } void goodGay::visit() { cout 好基友正在访问 building-m_SittingRoom endl; cout 好基友正在访问 building-m_BedRoom endl; } void test01() { goodGay gg; gg.visit(); } int main(){ test01(); system(pause); return 0; }✅ 整个goodGay类都被授权访问Building的私有成员3️⃣ 成员函数做友元class Building; class goodGay { public: goodGay(); void visit(); //只让visit函数作为Building的好朋友可以访问Building中私有内容 void visit2(); private: Building *building; }; class Building { //告诉编译器 goodGay类中的visit成员函数 是Building好朋友可以访问私有内容 friend void goodGay::visit(); public: Building(); public: string m_SittingRoom; //客厅 private: string m_BedRoom;//卧室 }; Building::Building() { this-m_SittingRoom 客厅; this-m_BedRoom 卧室; } goodGay::goodGay() { building new Building; } void goodGay::visit() { cout 好基友正在访问 building-m_SittingRoom endl; cout 好基友正在访问 building-m_BedRoom endl; } void goodGay::visit2() { cout 好基友正在访问 building-m_SittingRoom endl; //cout 好基友正在访问 building-m_BedRoom endl; } void test01() { goodGay gg; gg.visit(); } int main(){ test01(); system(pause); return 0; }✅ 注意这里只有visit()是友元visit2()就不能访问m_BedRoom—— 精准授权安全又灵活⚠️ 使用友元的小提醒友元破坏了封装性所以不要滥用它是 C 提供的一种“特例机制”用于在必要时突破访问限制。常用于操作符重载、工具函数、测试代码等场景。 总结类型谁能访问私有成员全局函数做友元指定的全局函数类做友元整个友元类的所有成员成员函数做友元仅指定的那个成员函数记住友元不是成员函数但它拥有“特权” 学完这篇是不是对friend更清楚了快去试试写自己的“好基友”吧 如果你觉得这篇文章对你有帮助欢迎点赞、在看、转发给正在学 C 的小伙伴我们下期见