山东大学:《Visual C++程序设计》第13章 运算符重载(张晓如)

第13章 运算符重载
2021/2/24 1 第13章 运算符重载

运算符重载 C++中允许使用者重新定义已有的运算,使之能按用 户规定的要求完成某些特定的操作,称运算符重载。 运用运算符重载可完成对象间的复杂操作,如加、 减法等 重载运算符 完成运算符重载的函数称为运算符重载函数。定义 算符重载函数的一般格式为: 返 值的类型类名porc数符 类型 运算件数所在的类 2021/224
2021/2/24 2 运算符重载 C++中允许使用者重新定义已有的运算,使之能按用 户规定的要求完成某些特定的操作,称运算符重载。 运用运算符重载可完成对象间的复杂操作,如加、 减法等。 重载运算符 完成运算符重载的函数称为运算符重载函数。定义 运算符重载函数的一般格式为: 类型 类名::operator @(参数表) {…} //函数体 关键字 重载运算符 函数 返回 值的 类型 运算符重载函数所在的类

例1:定义一个复数类,重载“+”和“-”运算符,使 这两个运算符能直接完成复数的加法和减法运算。 执行后输出: Real 55 Image=50 1301 R ea Image=50 Real=125 Image=250 Real=150 Image=300 Real=250 Image=500 注 1.优先级和结合顺序不变 2.不能改变目数,单目无参数双目一个参数 3重载函数名必须为 operator,后接一个合法的运 算符 2021/2/24
2021/2/24 3 例1:定义一个复数类,重载“+”和“-”运算符,使 这两个运算符能直接完成复数的加法和减法运算。 1301 执行后输出: Real=25 Image=50 Real=25 Image=50 Real=125 Image=250 Real=150 Image=300 Real=250 Image=500 注: 1. 优先级和结合顺序不变 2 .不能改变目数,单目无参数双目一个参数 3 .重载函数名必须为operator,后接一个合法的运 算符

4C++中允许重载的运算符如下表: 81 > 88 〓 /=% A 81 = -> new delete 2021/224
2021/2/24 4 + - * / % ^ & | ~ ! , = = ++ - - > == != && || += -= *= /= %= ^= &= |= >= [ ] ( ) -> ->* new delete 4.C++中允许重载的运算符如下表:

5C++中不允许重载的运算如下表: 运算符运算符的含义不允许重载的原因 三目运算符在C十中没有定义一个三目运算 符的语法 成员操作符为保证成员操作符对成员访间的 安全性,故不允许重载 成员指针操作符同上 作用域操作符|因该操作符左边的操作数是一个 ier求字节数操作符其操作数是一个类型名,而不是 20212/24
2021/2/24 5 运算符 运算符的含义 不允许重载的原因 ?: 三目运算符 在C++中没有定义一个三目运算 符的语法 . 成员操作符 为保证成员操作符对成员访问的 安全性,故不允许重载 * 成员指针操作符 同上 :: 作用域操作符 因该操作符左边的操作数是一个 类型名,而不是一个表达式 sizeof 求字节数操作符 其操作数是一个类型名,而不是 一个表达式 5.C++中不允许重载的运算如下表:

元运算符的重载 元运算符重载的一般格式: 类型类名: operator单目运算符() /数体 “++和“-”-元运算符存在前置与后置的问题。如对 “++”运算符。 “++”前置时运算符重载函数的一般格式 类型类名: operator++() “--”运算符 数体 与“++”类似 “++”后置时运算符重载函数的一般杓 类型类名: coperator+t(int) 函数体 没有实际意 2021/224 义,仅用作 6
2021/2/24 6 一元运算符的重载 一元运算符重载的一般格式: 类型 类名::operator 单目运算符() {…} //函数体 “++”和“--”一元运算符存在前置与后置的问题。如对 “++”运算符。 “++”前置时运算符重载函数的一般格式: 类型 类名::operator ++() {…} //函数体 “++”后置时运算符重载函数的一般格式: 类型 类名::operator ++(int) {…} //函数体 没有实际意 义,仅用作 区分 “- -”运算符 与“++”类似

例2:用一个类来描述人民币币值,用两个数据成员 分别存放元和分。重载“++”运算符,实现对象的加1 运 执行后输出: 1302 2550 51 运算符重载 25 函数不能定 51 105 70.9997 义为静态的 105 成员函数 70.9997 11097成员函数实现运算符重载时, 运算符的左操作符为当前对象 ,并要用到隐含的指针this 2021/224
2021/2/24 7 例2:用一个类来描述人民币币值,用两个数据成员 分别存放元和分。重载“++”运算符,实现对象的加1 运算。 1302 执行后输出: 25 50 25 51 25 51 105 70.9997 105 70.9997 1109元 97.3476 成员函数实现运算符重载时, 分 运算符的左操作符为当前对象 ,并要用到隐含的指针this。 运算符重载 函数不能定 义为静态的 成员函数

友元运算符 两种实现运算符重载的方法: °用类的成员函数实现 用类的友元函数实现,称为友元运算符 重载一元运算符的友元函数的一般核运算符重 载函数是 friend类型 operator@(类名X 类名X的 一元运算符加友元 重载二元运算符的友元函数的一般格式 两个参数 friend类型 operator@(参数1说明中至少有 明) 二元运算符 个是类 /函线的对象 2021/2/24 8
2021/2/24 8 友元运算符 两种实现运算符重载的方法: •用类的成员函数实现 •用类的友元函数实现,称为友元运算符。 重载一元运算符的友元函数的一般格式: friend 类型 operator @ (类名X &对象名) {…} //函数体 运算符重 载函数是 类名X的 友元 重载二元运算符的友元函数的一般格式: friend 类型 operator @ (参数1说明,参数2说 明) {…} //函数体 一元运算符 二元运算符 两个参数 中至少有 一个是类 X的对象

例3:用友元运算符实现复数的运算,包括二元 运算符“+”、一元运算符“”,用成员函数实现 “+=”运算。 执行后输出: 1303 Real=25 Image=50 Real Image=50 Real=125 Image=250 Real=150 Image=300 Real=250 Image=5n Rea|=450 Image-两种实现运算符重 Rea|=450mage载的方法,用法相 同,但编译器的处 理不同。 2021/224 9
2021/2/24 9 例3:用友元运算符实现复数的运算,包括二元 运算符“+”、一元运算符“-”,用成员函数实现 “+=”运算。 1303 执行后输出: Real=25 Image=50 Real=25 Image=50 Real=125 Image=250 Real=150 Image=300 Real=250 Image=500 Real=450 Image=500 Real=-450 Image=-500 两种实现运算符重 载的方法,用法相 同,但编译器的处 理不同

将对象内的成员数 转换函数 据转换成指定类型 转换函数(或称类型转换函数)是类中定义的 个成员函数。一般格式为 类名: operator类型() 要转换后的 /函数体 数据类型 例4:定义一个类,类中包含元、角、分,要把这 个数变成一个等价的实数。 执行后输出 1304 s1=307s2=120.55 s3=30.7s4=12055 5=30.756=30.7 2021/2/24 10
2021/2/24 10 转换函数 转换函数(或称类型转换函数)是类中定义的 一个成员函数。一般格式为: 类名::operator 类型() {…} 要转换后的 //函数体 数据类型 将对象内的成员数 据转换成指定类型 的数据 例4:定义一个类,类中包含元、角、分,要把这 三个数变成一个等价的实数。 执行后输出: 1304 s1=30.7 s2=120.55 s3=30.7 s4=120.55 s5=30.7 s6=30.7
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 山东大学:《Visual C++程序设计》第11章 继承和派生类(张晓如).ppt
- 山东大学:《Visual C++程序设计》第6章 数组(张晓如).ppt
- 山东大学:《Visual C++程序设计》第8章 指针和引用(张晓如).ppt
- 山东大学:《Visual C++程序设计》第5章 函数和编译预处理(张晓如).ppt
- 山东大学:《Visual C++程序设计》第2章 数据类型、运算符和表达式(张晓如).ppt
- 山东大学:《Visual C++程序设计》第9章 类和对象(张晓如).ppt
- 山东大学:《Visual C++程序设计》第3章 简单的输入/输出(张晓如).ppt
- 山东大学:《Visual C++程序设计》第7章 结构体、共同体 和枚举类型(张晓如).ppt
- 山东大学:《Visual C++程序设计》第1章 C++概述(张晓如).ppt
- 江苏科技大学电子信息学院计算机系:《VC++实验指导书》.doc
- 江苏科技大学电子信息学院计算机系:《VC++实验指导书》(计12个实验).doc
- 山东大学:高性能感应电机电流控制研究(硕士学位论文,程金路).pdf
- 《Photoshop CS3案例教程》项目四 制作图书封面——图像编辑.ppt
- 《Photoshop CS3案例教程》项目十二 制作下雪的圣诞节动画——动作与动画.ppt
- 《Photoshop CS3案例教程》项目十三 制作旅游网页界面——应用进阶.ppt
- 《Photoshop CS3案例教程》项目十一 制作折页广告——应用通道.ppt
- 《Photoshop CS3案例教程》项目十 制作茶叶包装盒——神奇的滤镜.ppt
- 《Photoshop CS3案例教程》项目六 打造精美电脑桌面——绘画与修饰工具.ppt
- 《Photoshop CS3案例教程》项目八 制作房地产广告——应用文字.ppt
- 《Photoshop CS3案例教程》项目五 制作电影海报——强大的图层.ppt
- 山东大学:《Visual C++程序设计》第12章 类的其他特性(张晓如).ppt
- 山东大学:《Visual C++程序设计》第14章 输入/输出流类库(张晓如).ppt
- 山东大学:《Visual C++程序设计》第10章 构造函数和析构函数(张晓如).ppt
- 山东大学:《Visual C++程序设计》第4章 C++的流程控制语句(张晓如).ppt
- 《单片机相关电子图书资料》51单片机C编程.pdf
- 《单片机相关电子图书资料》精彩51单片机教程.pdf
- 《单片机相关电子图书资料》第十一章 PIC 单片机的 C 语言编程.pdf
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第10章 Visual C++编程实例.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第10讲 对象数组和指针及对象作为函数参数.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第11讲 静态成员及友元.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第12讲 派生类的概念.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第13讲 派生的构造函数和析构函数.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第14讲 多继承.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第15讲 赋值兼容.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第16讲 多态性与虚.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第17讲 抽象类.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第18讲 运算符重载.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第19讲 几种常见的运算符重载及类型转换函数.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第1讲 面向对象程序设计概述.ppt
- 中国铁道出版社:《C++面向对象程序设计》课程教学资源(PPT课件讲稿)第20讲 模板.ppt