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

C++语言 码拜 9年前 (2016-02-03) 1360次浏览
感觉都是对成员变量的操作,为什么要有成员函数和友元函数之分呢?
解决方案:2分
反正本人重来不用什么友元函数,看着这种结构就恶心,宁愿把成员public。
解决方案:8分
友元还可以是个类
又例如你重载
<<, >> 输入输出操作符,需要使用友元 或 外部重载函数
本来就是该类拥有的动作或关联的动作,又或是对数据必有的运算  就设置为成员函数
外部(例如某个类)确实需要访问该类的私有数据,才需要友元函数
原因是你类本身并不是全部的私有数据都是有set/get接口的,也不会对外全部暴露数据本身
解决方案:20分
在C++中,使用到友元函数的原因:
在实现类之间数据共享时,减少系统开销,提高效率。
假如类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说,是为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。
友元的使用主要是为了提高效率和方便编程。有时候,普通函数需要直接访问一个类的保护或私有数据成员,假如没有友元机制,则只能将类的数据成员声明为公共的,然后却导致任何函数都可以无约束的访问它了。在类里声明一个普通函数,标上friend,就变成了该类的友元,可以访问该类的一切成员
需要友元的另外一个原因是为了方便重载操作符的使用。
解决方案:8分
友元函数也可以是成员函数啊
例如某个函数要同时对两个类的 private 成员进行操作,但是函数不能同时作为两个类的成员,这样就不得不用友元了
至于运算符重载方面,由于规则限制,所以用成员函数做不到,或虽然可以用成员函数但是不合适(例如出于运算符对称性考虑),需要使用非成员函数,假如这个非成员函数需要访问 private 成员,显然把它作为友元是最省事的方法
解决方案:2分
只有你这个函数不是公有的,而且想在类外访问才需要友元

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++里自定义类,一般什么函数要写成成员函数,什么函数要写成友元函数呢?有什么区别呢?
喜欢 (0)
[1034331897@qq.com]
分享 (0)