当前位置: 首页 > news >正文

c++入门——友元

友元

1.引入

在一个类中,我们用private和protected等访问限定符来封装成员,对外暴露接口,对内隐藏细节,但是这也同时增加了一些限制,在类外无法访问类内成员,而友元提供了一种突破类访问限定符封装的方式,可以实现类外访问类内成员,分为友元函数和友元类

2.友元函数

友元函数的实现需要在友元函数前面加上friend,并在需要访问的类中加上友元函数的声明,但这仅仅只是一种声明,并不意味着友元函数是要访问类的成员函数,这个声明可以放在类内的任何位置,不受访问限定符限制,一个函数可以是多个类的友元,在友元函数中可以自由的访问这些类的成员,如下代码所示:

//前置声明 否则A里面友元函数声明里编译器不认识B类型class B;class A{friendvoidfunc(constA&a,constB&b);private:int_a1=1;int_a2=2;};class B{//一个函数可以是多个类的友元friendvoidfunc(constA&a,constB&b);private:int_b1=1;int_b2=2;};voidfunc(constA&a,constB&b){cout<<a._a1<<endl;cout<<b._b1<<endl;}intmain(){A a;B b;func(a,b);return0;}

func()函数需要访问到类A、B中的私有成员变量_a1、_b1,如果不加友元是无法突破访问限定符访问的,此处将友元声明添加在了A和B类内部,使得func()可以访问类A、B的成员
友元函数没有this指针,必须显示传对象的参数

3.友元类

友元类为该类中所有的成员函数提供了一种访问其他类成员的方式,友元类中的成员函数都可以看做是同一个其他类的友元函数,都可以访问另一个类中的成员
友元类的关系是单向的,比如A是B的友元,但是B并不是A的友元
友元类的关系不能传递,比如A是B的友元,B是C的友元,但A不是C的友元

class C{friend class D;//单向关系 D可以访问C,C不能访问Dpublic:voidfun(constD&d);/*{ cout << d._d1 << endl;这里_d1在后面 编译器找不到 }->要声明定义分离*/private:int_c1=3;int_c2=4;};class D{friend class C;//相互成为友元public://如果D里面需要频繁调用C里private 可以声明友元类voidfun(constC&c){cout<<c._c1<<endl;cout<<c._c2<<endl;}private:int_d1;int_d2;};voidC::fun(constD&d){cout<<d._d1<<endl;}intmain(){C c;D d;d.fun(c);return0;}

友元虽然提供了访问的遍历,但是也在一定程度上破坏了耦合度,所以友元不宜多用

http://www.jsqmd.com/news/1300202/

相关文章:

  • STM32开发入门:从零到一掌握HAL库与CubeMX实战
  • 2026年下半年泰安土工材料生产厂家:永昇新材料全系土工合成材料供应能力解析 - 卓企推荐
  • Claudin18.2能否成为未来肿瘤靶向治疗的新焦点?
  • 2026有保障的义乌跨境供应链服务商选择攻略 - 资讯综合
  • 日语广播节目元数据智能解析与结构化处理技术实践
  • 智慧园区照明监控与能源管理系统方案
  • 免费云服务环境搭建全流程:从零配置到应用部署实战指南
  • 从LLM提示工程到RAG与Agent实战:构建自主AI系统的完整指南
  • 数据链路层核心技术解析:从帧结构到差错检测与介质访问控制
  • League Akari:英雄联盟智能助手完整使用指南与效率提升方案
  • 市场整治推进!青岛黄金回收整治虚高报价,正规变现认准合扬实体门店 - 好物测评局
  • 微信小程序开发框架与工具链选型实战:Taro vs uni-app深度解析
  • 2026年兰州电缆厂商甘肃金澳电线电缆综合实力说明 - 起跑123
  • 3分钟搞定Windows ADB驱动安装工具:安卓设备连接的终极解决方案
  • 单片机计算机毕设之基于 STM32 的车载显示屏站点与时显控制系统实现 基于单片机的公交终点站语音播报装置开发(014601)
  • 深入解析 Vue 架构:MVVM、MVC 和 MVP 模式的区别与实战对比
  • WebGL中逐元素运算与点乘运算的对比与应用
  • 香橙派Zero 2嵌入式Linux开发:从交叉编译到内核驱动实战
  • ai公文写作工具有哪些?千问、文心一言和材料星的写作流程对照
  • Navicat试用期重置终极指南:5种方法彻底解决14天限制问题
  • 2026论文工具综合实力天花板[特殊字符]全能无短板才是硬道理
  • 如何高效批量下载抖音无水印视频:douyin-downloader终极教程
  • 2026实力之选:广东东莞混凝土切割领域专业公司品牌实力解析 - 卓企推荐
  • 苏州 DELL 服务器供应商,要求原厂授权、苏州本地售后
  • 3个Windows安装Android应用的技术突破:APK Installer如何重新定义跨平台体验
  • 2026年甄选:广东东莞桥梁切割服务公司实力解析 - 优企名品
  • 单片机计算机毕设之基于嵌入式技术的便携式红外测温记录仪开发 基于 STM32F103C8T6 的温度阈值自定义控制系统(014701)
  • 西门子PLC定长切纸机控制方案解析与优化
  • AI生成UI组件库落地白皮书(2024企业级验证版):覆盖React/Vue/Svelte的12类高复用组件生成规范
  • 天猫返利APP大促压测实践:如何提前预判系统性能瓶颈