业界动态
【c++】友元函数
2024-12-16 15:32

为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率。
c++利用friend修饰符,可以让一些你设定的函数能够对这些保护数据进行操作,避免把类成员全部设置为public,最大限度的保护数据成员的安全。
具体来说:为了使其它类的成员函数直接访问该类的私有变量。
:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。(友元函数不是类的成员函数,是普通函数
优点:能够提高效率,表达简单、清晰。
缺点:友元函数破坏了封装机制,尽量使用成员函数,除非不得已的情况下才使用友元函数。

【c++】友元函数

什么时候使用友元

  • 运算符重载的某些场合需要使用友元。
  • 两个类要共享数据的时候。

怎么使用友元
友元函数的参数
因为友元函数是没有this指针,则参数要有三种情况

  • 要访问非static成员时,需要对象做参数。(常用
  • 要访问static成员或全局变量时,不需要对象做参数。
  • 如果做参数的对象是全局对象,则不需要对象做参数。

友元函数的位置
因为友元函数是类外的函数,所以它的声明可以放在类的私有段或公有段且没有区别。
友元函数的调用
可以直接调用友元函数,不需要通过对象或者指针。

友元函数

友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需要在友元的名称前面加上关键字。
具体格式为
友元函数的声明可以放在类的私有部分,也可以放在类的公有部分,它们是没有区别的,都说明是该类的一个友元函数。
一个函数可以是多个类的友元函数,只需要在各个类中分别声明。
友元函数的调用与一般函数的调用方式和原理一致。

友元类

友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。
当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。定义友元类的语句格式如下:其中:friend和class是关键字,类名必须是程序中的一个已经定义过的类。

函数来源总结

1 普通函数的友元函数

目的:使普通函数能够访问类的友元
语法:声明位置:公有私有均可,常写为公有
声明:friend+普通函数声明
实现位置:类内类外均可
实现代码:与普通函数相同
调用:类似普通函数,直接调用

2 类Y的所有成员函数都是类X的友元函数–友元类

目的:使用单个声明使Y类的所有函数成为类X的友元
它提供了一种类之间合作的一种方式,使类Y的对象可以具有类X和类Y的功能。
前提:A是B的友元 可推 A中的成员函数可以访问B中的所有成员。
语法:声名位置:公有私有均可,常写为私有(把类看成一个变量)。
声明:friend+类名。
代码

 
3 类Y的一个成员函数为类X的友元函数

目的:使类Y的一个成员函数成为类X的友元。
具体而言:在类Y的这个成员函数中,借助参数X,可以直接以X私有变量的形式访问私有变量。
语法:声明位置:声明在公有中(本身为函数
声明:friend+成员函数的声明
调用:先定义Y的对象y,使用y调用自己的成员函数,自己的成员函数中使用了友元机制。

4 在模板中使用友元operator<<(对<<运算符的重载)

使用方式
在模板类中声明

    以上就是本篇文章【【c++】友元函数】的全部内容了,欢迎阅览 ! 文章地址:http://fabua.ksxb.net/news/4500.html 
     文章      相关文章      动态      同类文章      热门文章      栏目首页      网站地图      返回首页 海之东岸资讯移动站 http://fabua.ksxb.net/mobile/ , 查看更多   
最新文章
明确0到2级辅助驾驶系统 “人机共驾”法律属性
公安部交通管理局局长王强7月23日在国新办举行的“高质量完成‘十四五’规划”系列主题新闻发布会上表示,为进一步加强规范管理
iPhone 17系列价格曝光:仅一款不涨价 Pro版更具性价比
【TechWeb】近段时间以来,全新iPhone 17系列尤为吸引外界的目光,而根据供应链最新爆料,iPhone 17系列距离亮相仅剩差不多一个
管庄回收茅台酒!管庄茅台酒回收!
137=1888=0048 回收茅台礼盒15年 30年 50年 80年茅台礼盒回收洋酒系列 回收路易十三,轩尼诗,拉菲,拉图,马爹利,人头马
北京到陶乐物流专线价格,货到付款
长胜物流24 小时服/务热线:||长途搬家|家电托运|电脑托运|液晶电视托运|冰箱托运|洗衣机托运|行李托运|电动车托运|摩托车托运|
解读Solana最新技术路线图:锚定“互联网资本市场”,打造链上华尔街
昨天 Solana 宣布了新的路线图。本质上,由于各链改进都已进入深水区,导致确实有些名词堆砌的情况,我试着用大家可以理解的方式
国泰海通发布新一代全AI智能APP灵犀
央广网北京7月26日消息(记者樊瑞)当前,人工智能技术正加速重构证券行业服务业态,加快发展新一代人工智能是推动证券行业高质
新加坡地道特色平价美食,好吃不踩雷
新加坡太多美食了~亚坤-咖椰吐司$5左右,这是我在新加坡吃的第一顿早餐。不知道好不好吃,但看着一大早就好多人排队,那就没错
上海UPS蓄电池回收
上海UPS回收,UPS电源回收,UPS电池回收:上海APC不间断电源回收,UPS主机回收,机房设备回收,回收UPS设备,UPS蓄电池回收,UPS
云边端协同:虚拟电厂的“神经网”革命
上海某高校586台空调在50秒内无感降负300kW,精度96.57%;重庆虚拟电厂调度17MW可调资源,延迟压缩至100ms级——这组数据的背后
高金食品与远方好物达成战略合作,让高品质“真黑猪”走进千家万户的餐桌
中国黑猪看四川,四川黑猪看高金。高金食品正用“真黑猪”,破局本土黑猪市场占有率困境,开创中国黑猪产业新篇章。7月23日,在