C++里自定义类,一般什么函数要写成成员函数,什么函数要写成友元函数呢?有什么区别呢?

蜂芒 2016-03-23 03:25:32
感觉都是对成员变量的操作,为什么要有成员函数和友元函数之分呢?
...全文
201 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
蜂芒 2016-03-23
  • 打赏
  • 举报
回复
引用 4 楼 D41D8CD98F的回复:
友元函数也可以是成员函数啊 比如某个函数要同时对两个类的 private 成员进行操作,但是函数不能同时作为两个类的成员,这样就不得不用友元了 至于运算符重载方面,由于规则限制,所以用成员函数做不到,或者虽然可以用成员函数但是不合适(例如出于运算符对称性考虑),需要使用非成员函数,如果这个非成员函数需要访问 private 成员,显然把它作为友元是最省事的方法
但是两个类不同的话,函数的形参也就不同了,怎么可以一个函数给两个类作为友元函数呢?
paschen 版主 2016-03-23
  • 打赏
  • 举报
回复
只有你这个函数不是公有的,而且想在类外访问才需要友元
D41D8CD98F 2016-03-23
  • 打赏
  • 举报
回复
友元函数也可以是成员函数啊 比如某个函数要同时对两个类的 private 成员进行操作,但是函数不能同时作为两个类的成员,这样就不得不用友元了 至于运算符重载方面,由于规则限制,所以用成员函数做不到,或者虽然可以用成员函数但是不合适(例如出于运算符对称性考虑),需要使用非成员函数,如果这个非成员函数需要访问 private 成员,显然把它作为友元是最省事的方法
小灸舞 2016-03-23
  • 打赏
  • 举报
回复
在C++中,使用到友元函数的原因: 在实现类之间数据共享时,减少系统开销,提高效率。 如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说,是为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。 友元的使用主要是为了提高效率和方便编程。有时候,普通函数需要直接访问一个类的保护或私有数据成员,如果没有友元机制,则只能将类的数据成员声明为公共的,然后却导致任何函数都可以无约束的访问它了。在类里声明一个普通函数,标上friend,就变成了该类的友元,可以访问该类的一切成员 需要友元的另外一个原因是为了方便重载操作符的使用。
幻夢之葉 2016-03-23
  • 打赏
  • 举报
回复
友元还可以是个类 又比如你重载 <<, >> 输入输出操作符,需要使用友元 或者 外部重载函数 本来就是该类拥有的动作或者关联的动作,又或者是对数据必有的运算 就设置为成员函数 外部(比如某个类)确实需要访问该类的私有数据,才需要友元函数 因为你类本身并不是所有的私有数据都是有set/get接口的,也不会对外全部暴露数据本身
sdghchj 2016-03-23
  • 打赏
  • 举报
回复
反正我重来不用什么友元函数,看着这种结构就恶心,宁愿把成员public。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧