建设局网站上海网站建设公司

昆山合汇富电子科技有限公司 2026/09/09 17:41:01

🧑‍💻 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_BedRoom


2️⃣ 类做友元

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++ 的小伙伴!

我们下期见!👋

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

网站建设制作昆明网站建设

GPT-SoVITS 支持 CUDA 12 吗?实测验证与部署指南在当前 AI 语音技术飞速发展的背景下,越来越多开发者开始尝试本地化部署高性能的语音克隆系统。GPT-So

2026/06/30 13:14:05

扬中网站建设青岛外贸网站建设

GPT-SoVITS模型性能监控仪表盘:实时跟踪推理服务质量在语音合成技术快速渗透进直播、客服、有声内容创作的今天,一个让人“听不出是机器”的个性化声音不再是奢侈品。开源社

2026/06/30 11:10:24

深圳网站建设公司青岛网站建设哪家好

在处理前端表单验证时,经常需要对用户输入的金额、尺寸等数值进行精确控制,要求其必须为一位小数。使用JavaScript正则表达式是实现这一校验最直接有效的方法。它不仅能确保

2026/06/30 10:37:21

网站建设策划沧州网站建设

在浩瀚的学术海洋中,一篇扎实、全面、逻辑清晰的“文献综述”是任何研究工作的基石。它不仅是对前人研究成果的系统性梳理,更是确立自身研究价值与创新点的关键环节。然而࿰

2026/06/30 13:16:35

网站建设一条龙网站建设公告

YOLOFuse 与 FastStone Capture 构建高效截图标注工具链在夜间监控、智能安防和自动驾驶等实际场景中,单一可见光图像往往难以应对低光照、烟雾或遮挡带来的挑战。例如&

2026/06/30 13:44:37

网站建设服务网站建设计划书

敏捷项目规划与估算全解析1. 迭代后期的任务考量在迭代接近尾声时,应避免不理想的情况出现。对于较长的迭代,项目负责人需仔细审视团队定义的各项任务,确保任务规模小且能在数小时或数天内完成。同时,要保证刚

2026/06/30 13:04:04

郑州网站建设深圳外贸网站建设

还在为Cursor Pro的机器码限制而烦恼吗?每次用完免费额度就要重新配置,浪费宝贵时间?今天分享的cursor-free-everyday工具࿰

2026/06/30 11:27:25

网站建设步骤大良网站建设

第一章:C++ 内核配置静态优化概述在现代高性能计算和嵌入式系统开发中,C++ 内核的静态优化技术成为提升程序执行效率的关键手段。通过对编译

2026/06/30 10:50:52

行业网站建设高端品牌网站建设

HeyGem 数字人视频生成系统技术解析:AI驱动的批量口型同步视频合成在短视频与自动化内容爆发的时代,企业每天都在为如何高效生产高质量讲解视频而头疼。传统的拍摄剪辑流程不

2026/06/30 11:56:29

四川网站建设阳网站建设

在数据要素市场化加速推进的背景下,物流行业“数据孤岛”、合规风险、价值释放难等痛点日益凸显。华储数据作为物流可信数据空间领域的先行企业,聚焦数据可信运营与价值赋能ÿ

2026/06/30 14:09:08