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

上海速莱乐流体机械设备有限公司 2026/09/09 17:58:26

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

我们下期见!👋

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

广州市网站建设荆门网站建设

从零开始玩转Arduino:环境搭建到多传感器实战你是不是也有过这样的经历?买了一块Arduino开发板,兴冲冲地插上电脑,结果IDE打不开、驱

2026/06/30 13:45:07

建设网站珠海网站建设

随着macOS应用程序的日益丰富,菜单栏拥挤已经成为许多用户的工作效率障碍。密密麻麻的图标不仅影响视觉体验,更让重要功能难以快速定位。Ice作为一款专为macOS 14&#

2026/06/30 13:51:37

咸阳网站建设网站建设一条龙服务

UNIX系统用户管理与公共关系策略在UNIX系统管理中,用户管理和公共关系是至关重要的两个方面。良好的用户管理能够确保新用户顺利融入系统环境,高效开展工作;而有效的公共关系则有助于提升用户满意度,增强

2026/06/30 13:36:36

建设局网站莆田网站建设

Qwen3-VL-8B:为何它成了多模态AI入门的首选?在智能客服开始看懂用户上传的照片、电商系统能自动描述商品图、内容平台可一键生成图文摘要的今天,多模态人

2026/06/30 13:20:35

手机网站建设万州网站建设

LiteLoaderQQNT作为QQNT桌面客户端的专业插件加载器,能够为用户提供强大的功能扩展能力。通过安装各类实用插件,你可以获得主题美化、快捷操作、消息增强等丰富功能

2026/06/30 13:56:38

济宁网站建设安徽网站建设

Lua CJSON终极指南:5个技巧提升JSON处理效率【免费下载链接】lua-cjsonLua CJSON is a fast JSON encoding/parsing module

2026/06/30 13:14:05

网站建设技术深圳外贸网站建设

SSH 工具使用与配置全解析1. sshd 关键字详解1.1 基本选项–Q:若缺少 RSA 支持则安静运行。–t:进入测试模式。–u length:设置 utmp 结构的长度。–v:开启详细模式。–V

2026/06/30 11:00:53

南京网站建设徐州网站建设

解密专业级RAW处理:开源神器darktable深度实战指南【免费下载链接】darktabledarktable is an open source photography workfl

2026/06/30 13:51:07

济宁网站建设邢台网站建设

Diskinfo检测SSD寿命:确保GPU服务器长期稳定运行在大规模AI训练任务中,一次意外的存储故障可能意味着数天甚至数周的计算成果付诸东流。你有没有遇到过这样的场景&#

2026/06/30 11:37:56

昆明网站建设顺德网站建设

VibeVoice能否用于电影配音初稿生成?行业影响探讨在影视制作的漫长链条中,配音初稿往往是一个“看不见却绕不开”的环节。传统流程里,导演需要协调临时配音演

2026/06/30 11:29:25