C++中的友元函数与重载运算符解析
需积分: 35 194 浏览量
更新于2024-08-24
收藏 1.05MB PPT 举报
"这篇资料主要讨论了C++中的重载运算符与一般函数之间的比较,以及友元函数的概念和特点。"
在C++编程中,重载运算符和一般函数都是实现特定功能的重要手段,但它们之间存在一些差异。首先,重载运算符和一般函数都可以是类的成员,用于实现类的某些特定行为。例如,`AddA` 是一个一般函数,而 `operator +` 是重载的加法运算符。两者都能完成数值的相加操作。
对于重载的运算符,如 `operator +`,它的调用方式与普通函数不同。在示例中,`a3 = a1 + a2;` 使用了重载的加法运算符,运算符的左操作数 `a1` 实际上调用了这个运算符。而 `AddA` 函数则需要通过对象名和参数来调用,如 `a3.AddA(a1, a2);`。这展示了重载运算符在语法上的便捷性。
返回值方面,`AddA` 函数没有返回值,而是直接修改了 `a3` 的成员 `i`。而重载的 `operator +` 创建了一个新的对象 `t`,并将结果存储在其中,然后返回这个新对象。这种差异体现了运算符重载通常会保持原操作数不变,返回一个新的对象以保持“不可变”原则。
接下来,资料介绍了友元函数的概念。友元函数是一种特殊类型的函数,它能访问类的私有和保护成员,打破了封装性。在类定义中声明 `friend` 关键字后,友元函数可以自由地访问类的所有数据。例如,`class A` 中的 `friend float Sum(A&)` 就是一个友元函数,它可以直接访问 `A` 类的私有成员 `x` 和 `y`。
友元函数不是类的成员函数,所以它没有 `this` 指针,必须通过对象名或对象引用作为参数来访问成员。在示例中,`Sum(t2)` 是通过对象 `t2` 来调用友元函数 `Sum` 的,而友元函数可以直接操作对象的私有数据。
友元函数的使用需要注意以下几点:
1. 友元函数必须在类的定义中声明,但它可以在类内或类外定义函数体。
2. 它可以访问类的所有成员,包括私有和保护成员,而一般函数只能访问公有成员。
最后,示例中展示了两种不同的 `Sum` 函数,一个为友元函数,另一个为非友元函数。友元函数 `Sum(A&)` 直接访问了对象的私有成员 `x` 和 `y`,而非友元函数 `Sumxy(A&a)` 则通过公共接口 `Getx()` 和 `Gety()` 访问成员。
总结来说,C++ 中的重载运算符提供了一种更加自然和直观的方式来表达操作,而友元函数则提供了对私有和保护成员的访问途径,虽然这可能会影响类的封装性,但在某些情况下,友元函数是必要的设计选择。理解并熟练运用这些概念对于编写高效且易于维护的C++代码至关重要。
2019-01-24 上传
314 浏览量
2020-09-05 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
黄子衿
- 粉丝: 20
- 资源: 2万+
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章