版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象编程技术与方法(C++)
第5章运算符重载第5章运算符重载第5章
运算符重载
5.1运算符重载的概念
5.2运算符重载的规则
5.3运算符重载的两种形式
5.3.1重载为类的成员函数
5.3.2重载为类的友元函数
5.3.3两种重载方式讨论
5.4特殊运算符重载举例
5.4.1类型转换运算符
5.4.2复合赋值运算符
5.4.3自增和自减运算符
5.4.4流提取运算符和流插入运算符
5.5函数对象
5.6小结
第5章运算符重载5.1运算符重载的概念
5.2运算符重载的规则 5.3运算符重载的两种形式 5.4特殊运算符重载举例 5.5函数对象 5.6小结
第5章运算符重载5.1运算符重载的概念运算符重载也就是函数重载。运算符函数重载的声明格式: 返回类型operator运算符(形参列表);C++预定义的运算符只能操作基本数据类型的对象,例如对于int型对象a和b,求和可以直接写为a+b。但是对于类对象,不能直接使用类似的表达方式。例如,对于两个CPoint类型的对象obj1和obj2,我们仍然希望能够像基本数据类型那样将表达式写为:obj1+obj2。解决方法就是在定义类CPoint时,重载运算符函数operator+()。第5章运算符重载5.1运算符重载的概念 5.2运算符重载的规则
5.3运算符重载的两种形式 5.4特殊运算符重载举例 5.5函数对象 5.6小结
第5章运算符重载5.2运算符重载的规则大多数C++运算符都可以重载。下面几个不能重载:成员访问运算符(.)、成员指针访问运算符(.*)、作用域运算符(::)、求字节数运算符(sizeof)、类型识别(typeid)、条件运算符(?:)C++不允许用户定义新的运算符,只可以对已有的运算符进行重载。重载不会改变运算符操作对象的个数。重载后运算符的优先级以及结合性不变。运算符重载函数与一般函数的区别是:前者的参数个数只能是一个或者两个,而一般函数参数的个数没有限制。运算符重载函数的形参不能带默认值。虽然重载允许改变函数的功能,但应当使运算符重载后的功能与重载前的功能类似。一般来说,操作数包含有类对象的运算符都应该重载。但取地址运算符“&”可以直接使用,不用自己重载;赋值运算符“=”有时不用重载,因为系统可以提供一个默认的赋值函数,特殊情况下则需要用户重新定义。第5章运算符重载5.1运算符重载的概念 5.2运算符重载的规则 5.3运算符重载的两种形式5.4特殊运算符重载举例 5.5函数对象 5.6小结
第5章运算符重载5.3运算符重载的两种形式5.3.1重载为类的成员函数在下面的例子中,定义一个复数类Complex。以一元运算符取负(-)和二元运算符减(-)为例,说明将一元运算符和二元运算符重载为成员函数的方法。由于类的非静态成员函数都隐含一个this参数,当调用对象的成员函数时this被自动初始化指向当前的对象。因此表面上看,一元运算符成员函数不带参数,二元运算符成员函数带一个参数,该参数是右操作数(运算符右侧的操作数),左操作数由this提供。第5章运算符重载5.3.2重载为类的友元函数将上例改为重载为友元的形式。由于友元函数不是类的成员函数,因此没有this指针。这时,一元运算符友元函数应带一个参数,二元运算符友元函数应带两个参数。第5章运算符重载5.3.3两种重载方式讨论运算符的两种重载形式都可以实现要求的功能,但是成员函数和友元函数是不同的。从表面上看,友元函数比成员函数多一个形参。实际上,成员函数所在的对象就是第1个操作数。一般而言,应将一元运算符重载为成员函数,将二元运算符重载为友元函数。“()”、“[]”、“->”、“->*”及“=”必须重载为成员函数。如果运算符的第一个操作数为当前的类类型,则可以重载为成员函数;如果运算符有一个操作数不是当前的类类型,则应重载为友元函数。例如,要计算(7.53-c1)的值,其中c1是Complex类对象。成员函数重载时,该表达式被解释为:7.53.operator-(c1);友元函数重载时,该表达式被解释为:operator-(Complex(7.53),c1)第5章运算符重载第5章运算符重载5.1运算符重载的概念 5.2运算符重载的规则 5.3运算符重载的两种形式 5.4特殊运算符重载举例
5.5函数对象 5.6小结
第5章运算符重载5.4特殊运算符重载举例5.4.1类型转换运算符5.4.2复合赋值运算符5.4.3自增和自减运算符5.4.4流提取运算符和流插入运算符第5章运算符重载5.4特殊运算符重载举例5.4.1类型转换运算符类的转换构造函数可以将数据由其他类型转换为当前的类类型。反过来,如果想将数据由当前的类类型转换为其他类型,需要将类型转换运算符“()”重载为类的成员函数。其声明形式为:
类名::operatorT();
该语句声明将数据由当前的类类型转换为T类型。注意该成员函数没有参数,没有返回类型,但函数体内必须有返回T类型值的语句。第5章运算符重载5.4特殊运算符重载举例5.4.1类型转换运算符5.4.2复合赋值运算符5.4.3自增和自减运算符5.4.4流提取运算符和流插入运算符第5章运算符重载5.4特殊运算符重载举例5.4.2复合赋值运算符第4章介绍了赋值运算符的重载方法。假设在类定义中,重载了赋值运算符“=”和加法运算符“+”,那么复合赋值运算符“+=”是不是就可以直接使用呢?答案是否定的。要想使“+=”适用于类对象,必须单独进行重载。其他复合赋值运算符也一样。第5章运算符重载5.4特殊运算符重载举例5.4.1类型转换运算符5.4.2复合赋值运算符5.4.3自增和自减运算符5.4.4流提取运算符和流插入运算符第5章运算符重载5.4特殊运算符重载举例5.4.3自增和自减运算符自增“++”和自减“--”都有前置和后置两种情况。如果有“inta=3;”,++a的含义是“a的值先加1再被使用”,a++的含义是“先使用a的原值然后a再加1”。重载”++”后应保持原来的含义不变。规定后置一元运算符重载为成员函数时,带一个int型参数,该参数并不使用,只是为了和前置情况区分开。前置++与后置++重载为成员函数的声明形式分别为:
const类名&类名::operator++(); //前置
const类名类名::operator++(int);//后置运行结果:a:11c:11b:11c:10第5章运算符重载5.4特殊运算符重载举例5.4.1类型转换运算符5.4.2复合赋值运算符5.4.3自增和自减运算符5.4.4流提取运算符和流插入运算符第5章运算符重载5.4特殊运算符重载举例5.4.4流提取和流插入运算符在标准库的istream类中重载了提取运算符(>>),ostream类中重载了插入运算符(<<),这两个运算符重载函数可以完成从istream对象(cin)提取和向ostream对象插入基本类型数据的功能,但不能提取和插入类对象数值。如果希望能够提取和插入类对象数值,需要在定义类时重载这两个运算符。第5章运算符重载5.1运算符重载的概念 5.2运算符重载的规则 5.3运算符重载的两种形式 5.4特殊运算符重载举例 5.5函数对象
5.6小结
第5章运算符重载5.5函数对象函数对象是指重载了调用运算符“()”(注意与类型转换运算符区分开)的普通类对象,但是可以采用与函数调用形式相同的写法来调用对象的该运算符重载函数。函数对象可以代替函数指针作为参数。优点:首先,函数对象可以保存上次调用结果的数据,而使用普通函数只能将结果存储在全局或者静态变量中;其次,编译器能内嵌重载的运算符代码,就避免了函数调用所产生的运行时问题。运行结果:5,7第5章运算符重载5.1运算符重载的概念 5.2运算符重载的规则 5.3运算符重载的两种形式 5.4特殊运算符重载举例 5.5函数对象 5.6小结
第5章运算符重载
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度模板木方订购合同
- 皮肤测试仪市场需求与消费特点分析
- 2024年度房屋买卖合同:某市中心住宅小区房屋买卖
- 2024年度企业品牌形象策划合同
- 2024年度新能源设备研发与生产合同
- 2024年度场部信息保密制度及场地使用权合同
- 2024年度光伏电站建设与运营承包合同
- 04版泵车采购与安装服务合同
- 2024年度淮南市某年产00万吨煤矿矿区建筑工程施工合同
- 2024年度临时司机人力资源租赁合同
- 第12讲 时间尺度下的地貌演化过程(高考一轮复习课件)
- 《电力可靠性管理办法》参考试题库(含答案)
- 中国糖尿病视网膜病变临床诊疗指南更新
- 岗位工资薪酬层级标准体系对应表
- 教育集团理事会职责
- 违规收受红包礼金自查自纠报告范文六篇
- 24.1.4-圆周角-第1课时说课课件-
- (正式版)SH∕T 3507-2024 石油化工钢结构工程施工及验收规范
- 血液灌流及血浆置换在急重症领域的应用
- 成品烟道安装施工方案
- 车库委托出售协议书
评论
0/150
提交评论