需要友元的原因及使用

简介:

有时候,普通函数需要直接访问一个类的保护或私有数据成员。如果没有友元机制,则只能将类的数据成员声明为公共的,从而,任何函数都可以无约束的访问它。

普通函数需要直接访问类的保护或私有数据成员的原因主要是为提高效率。

在类里声明一个普通函数,标上关键字friend,就成了该类的友元,可以访问该类的一切成员。

需要友元的另一个原因是为了方便重载操作符的使用。

友元函数不是成员函数,它是类的朋友,因而能够访问类的全部成员。在类的内部,只能声明它的函数原型,加上friend关键字。友元声明的位置可以在类的任何部位,既可在public区,也可在protected区,意义完全一样。友元函数定义则在类的外部,一般与类的成员函数定义放在一起。因为类重用时,一般友元是一起提供的。

一个类的成员函数可以使另一个类的友元。

整个类可以是另一个类的友元,该友元成为友类。友类的每个成员函数都可访问另一个类中的保护或私有数据成员。

友元的作用主要是为了提高效率和方便编程。但随着硬件性能的提高,友元的这点作用是微不足道的。相反,友元破坏了类的整体操作性,也破坏了类的封装,所以在使用时,要权衡利弊。




本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3293286.html,如需转载请自行联系原作者

目录
相关文章
|
8月前
|
分布式计算 运维 搜索推荐
立马耀:通过阿里云 Serverless Spark 和 Milvus 构建高效向量检索系统,驱动个性化推荐业务
蝉妈妈旗下蝉选通过迁移到阿里云 Serverless Spark 及 Milvus,解决传统架构性能瓶颈与运维复杂性问题。新方案实现离线任务耗时减少40%、失败率降80%,Milvus 向量检索成本降低75%,支持更大规模数据处理,查询响应提速。
412 57
|
UED 容器
使用Flexbox布局实现响应式设计
【10月更文挑战第27天】
|
JSON 测试技术 API
接口测试的测试用例该怎么写呢
在上面的代码中,我们首先设置了测试用例的输入参数,包括请求的方法、URL、请求头、请求体等。然后使用requests库发送请求并获取响应结果。最后,我们使用assert语句对响应结果的状态码和响应体进行验证。如果验证不通过,assert语句会抛出异常并终止程序的执行。如果验证通过,程序将继续执行后面的代码。
|
JavaScript
vue 父组件修改子组件的样式——深度作用选择器 >>> 、 /deep/ 、 ::v-deep
vue 父组件修改子组件的样式——深度作用选择器 >>> 、 /deep/ 、 ::v-deep
501 0
|
消息中间件 监控 Java
使用Java进行实时数据处理的工具和技术
使用Java进行实时数据处理的工具和技术
|
Java API
DirectByteBuffer内存释放原理
DirectByteBuffer内存释放原理
225 0
|
存储 数据可视化 数据挖掘
Python下多变量联合分布图(pairplot)绘制——seaborn
Python下多变量联合分布图(pairplot)绘制——seaborn
451 1
Springboot Http文件的访问 Url 转换 MultipartFile ,File 转 MultipartFile
Springboot Http文件的访问 Url 转换 MultipartFile ,File 转 MultipartFile
1583 0
|
存储 算法 大数据
Python算法高手的必修课:深入理解分治法、贪心算法、动态规划,让你的代码更智能!
【7月更文挑战第9天】在Python算法学习中,分治法(如归并排序)将大问题分解为小部分递归解决;贪心算法(如货币找零)在每步选择局部最优解尝试达到全局最优;动态规划(如斐波那契数列)通过存储子问题解避免重复计算,解决重叠子问题。掌握这三种方法能提升代码效率,解决复杂问题。
254 1
|
JavaScript Java 测试技术
基于ssm+vue.js的幼儿资源互助共享平台附带文章和源代码设计说明文档ppt
基于ssm+vue.js的幼儿资源互助共享平台附带文章和源代码设计说明文档ppt
85 0