C++友元
通俗说法:
如果将类的封装比喻成一堵墙的话,那么友元机制就像墙上了开了一个门,那些得 到允许的类或函数允许通过这个门访问一般的类或者函数无法访问的私有属性和方
法。友元机制使类的封装性得到消弱,所以使用时一定要慎重。
友元只授权特有对象访问自己(类中)的私有函数或数据,同时避免频繁调用的处理器开销。
友元只能包含不能继承,只有单向性,不具有可交换性和可传递性。
C++良好的共有、私有、受保护机制可以保证封装的安全访问,但友元刚好相反,它以牺牲封装性为代价,可以通过友元函数、友元类、友元成员函数让不同访问级别的对象可以通讯访问:
友元函数:可以让同类的public函数可以访问本类的私有数据,格式:本类的共有函数前加关键字“friend”。友元函数不属于类的成员函数而是定义在外部,不需要加类限定,声明可以放在public部分,也可以放在private部分。
友元类:只能是包含关系,B的整个成员函数都作为A类中的一个成员,则B就直接访问A(墙和门的例子,主要应用场合是当B类要存取A类时),格式:本类的共有数据成员中加加关键字“friend class 类型”。
友元成员函数:B的成员函数作为友元成为A的友元成员函数,则B就可以访问A的函数,但必须先声明B,再声明B的函数是A的友元成员函数,最后才能定义友元函数。格式:本类的public成员函数中加加关键字“friend 返回类型 B::函数名”
一个函数可以成为多个类的的友元函数,只需要在各个类中将其声明即可
具体应用:可以通过友元的重载,在不同类中使用IO流库;可以让不支持类的其它编程语言(C/汇编)和C++融合编程。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?