九江网站建设上海外贸网站建设

广州盛基地坪工程有限公司 2026/09/09 18:40:52

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

我们下期见!👋

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

英文网站建设徐家汇网站建设

第一章:边缘计算新范式与Quarkus 2.0的融合演进随着物联网设备和实时数据处理需求的激增,边缘计算正逐步取代传统集中式云计算架构,成为低延迟、高响应系统

2026/06/30 11:00:23

潍坊网站建设网站建设全包

终极免费网页音乐制作:简单上手的在线MIDI编辑器完全指南【免费下载链接】midieditorProvides an interface to edit, record, and pla

2026/06/30 12:22:31

丹阳网站建设襄樊网站建设

Miniconda-Python3.9环境下加载大模型权重的方法在当前AI研发节奏日益加快的背景下,一个常见的痛点浮出水面:为什么同样的代码,在同事的机器上运

2026/06/30 12:18:30

济南网站建设公司建设企业网站

在云原生环境中,系统的复杂性和动态性不断增加,为了确保系统在面对各种故障时仍能保持稳定和可靠,混沌工程应运而生。它是一种通过主动引入故障来验证系统弹性和容错能

2026/06/30 13:38:36

网站建设项目济南网站建设公司

LobeChat可持续发展倡议文案在AI技术加速渗透日常生活的今天,大语言模型(LLM)已不再是实验室里的概念玩具。从智能客服到个人助手,对话式

2026/06/30 10:24:20

广州 网站建设部门网站建设

第一章:视觉测试工具的演进与行业需求随着前端技术的飞速发展和用户对界面体验要求的不断提升,视觉测试逐渐成为保障软件质量的关键环节。传统的功能测试难以捕捉界面渲染差异、布局偏

2026/06/30 12:47:03

济南网站建设扬州网站建设

第一章:Open-AutoGLM 会议纪要自动生成分发Open-AutoGLM 是一款基于大语言模型的自动化办公工具,专注于会议纪要的智能生成与高效分发。系统通过接入音视频

2026/06/30 10:52:22

团购网站建设扬中网站建设

浏览器PPT革命:无需安装的专业演示文稿创作体验【免费下载链接】PPTist基于 Vue3.x + TypeScript 的在线演示文稿(幻灯片)应用

2026/06/30 11:47:27

湖州网站建设湖北网站建设

VoxCPM语音克隆终极指南:零基础也能创造专属AI声音【免费下载链接】VoxCPM-0.5B项目地址: https://ai.gitcode.com/OpenBMB/VoxCPM-0.

2026/06/30 11:02:53

渭南网站建设公司网站建设的

还在为AI应用需要云端联网而烦恼吗?谷歌最新开源的Gemma 3 270M模型彻底改变了这一现状。这款仅有2.7亿参数的轻量级AI模型,能在普通手机上实现秒级启动ÿ

2026/06/30 14:07:08