C++中的友元函数与重载运算符解析
需积分: 35 124 浏览量
更新于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++代码至关重要。
444 浏览量
202 浏览量
2221 浏览量
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情

黄子衿
- 粉丝: 24
最新资源
- Android PRDownloader库:支持文件下载暂停与恢复功能
- Xilinx FPGA开发实战教程(第2版)精解指南
- Aprilstore常用工具库的Java实现概述
- STM32定时开关模块DXP及完整项目资源下载指南
- 掌握IHS与PCA加权图像融合技术的Matlab实现
- JSP+MySQL+Tomcat打造简易BBS论坛及配置教程
- Volley网络通信库在Android上的实践应用
- 轻松清除或修改Windows系统登陆密码工具介绍
- Samba 4 2级免费教程:Ubuntu与Windows整合
- LeakCanary库使用演示:Android内存泄漏检测
- .Net设计要点解析与日常积累分享
- STM32 LED循环左移项目源代码与使用指南
- 中文版Windows Server服务卸载工具使用攻略
- Android应用网络状态监听与质量评估技术
- 多功能单片机电子定时器设计与实现
- Ubuntu Docker镜像整合XRDP和MATE桌面环境