C++中的友元函数与重载运算符解析
需积分: 35 38 浏览量
更新于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 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
黄子衿
- 粉丝: 21
- 资源: 2万+
最新资源
- app:詹金斯的应用程序
- react-hot-export-loader:一个Webpack加载器,自动插入react-hot-loader代码,灵感来自react-hot-loader-loader
- DIY制作属于自己的CP2102 USB-UART桥接器(原理图+PCB源文件)-电路方案
- 雅典:开源网络思想。 内部封闭测试正在进行中! 通过https:forms.gle9L1D1T7R3G7pvh1e7加入候补名单。 赞助我们以更快获得测试版!
- uni-app之flex布局教程 uniapp在线教程 uni app视频教程
- jamesSampica.github.io:自己的博客
- Android动画效果源代码
- 教师招聘学习软件支持幼儿教师招聘,小学中学教师招聘,小学中学教育学心理学等等
- LoveAndShare:基于Python django建造的知识分享与视频播放网站
- fp-gitlab-example:用于转换API请求以使用fp-ts的示例代码
- 彻底搞懂Spring+SpringMVC+MyBatis 框架整合(IDEA版,含源码)
- EmployeeWageComputation
- my-first-webpage
- getting_cleaning_data:回购获取和清洁数据; JHU课程; 数据科学专业
- MPLAB ICD2仿真器原理图+PCB+HEX文件-电路方案
- 灰白经典婚纱照网站模板