




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、主讲:魏英主讲:魏英运算符重载2什么是运算符重载什么是运算符重载问题举例问题举例复数的运算复数的运算class complex public: complex(double r=0.0,double i=0.0) real=r; imag=i; void display(); /显示复数的值显示复数的值 private: double real; double imag;3 问题:问题: 用用“+”、“-”能实现复数的加减运算吗?能实现复数的加减运算吗? 实现复数加减运算的方法实现复数加减运算的方法 重载重载“+”、“-”运算符运算符 运算符重载的实质运算符重载的实质对已有的运算符赋予多重含义
2、。对已有的运算符赋予多重含义。 运算符重载的必要性运算符重载的必要性C+中定义的运算符其运算对象中定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义的类型。只能是基本数据类型,而不适用于用户自定义的类型。 不可以重载的运算符有:不可以重载的运算符有: . .* : ?: sizeof什么是运算符重载什么是运算符重载4 运算符重载的实现机制:运算符重载的实现机制: 1)将制定的运算表达式转化为对运算符函数的调用,运)将制定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。算对象转化为运算符函数的实参。 2)编译系统对重载运算符的选择,遵循函数重载的选择)编译系统对
3、重载运算符的选择,遵循函数重载的选择原则。原则。什么是运算符重载什么是运算符重载5运算符重载的规则和限制:运算符重载的规则和限制: 1)只能重载)只能重载C+语言中已有的运算符,不可臆造新的。语言中已有的运算符,不可臆造新的。 2)不可改变原运算符的优先级和结合性。)不可改变原运算符的优先级和结合性。 3)不能改变操作数的个数。)不能改变操作数的个数。 4)经重载的运算符,其操作数至少应该有一个是自定义)经重载的运算符,其操作数至少应该有一个是自定义类型。类型。什么是运算符重载什么是运算符重载6运算符重载的两种形式:运算符重载的两种形式: 1)重载为类成员函数)重载为类成员函数 2)重载为友元
4、函数)重载为友元函数什么是运算符重载什么是运算符重载7运算符函数运算符函数 声明形式声明形式 函数类型函数类型 operator 运算符(形参)运算符(形参) 重载为成员函数时重载为成员函数时 参数个数参数个数=原操作数个数原操作数个数-1 (后置(后置+、-除外)除外) 重载为友元函数时重载为友元函数时 参数个数参数个数=原操作数个数原操作数个数,且至少应该有一个自定义类型,且至少应该有一个自定义类型的形参。的形参。8运算符成员函数的设计运算符成员函数的设计 双目运算符双目运算符B 如果要重载如果要重载B为类成员函数,使之能够实现表达式为类成员函数,使之能够实现表达式oprd1 B oprd
5、2,其中,其中oprd1为为A类对象,则类对象,则B应被重载为应被重载为A类类的成员函数,形参类型应该是的成员函数,形参类型应该是oprd2所属的类型。所属的类型。 经重载后,表达式经重载后,表达式oprd1 B oprd2相当于相当于 oprd1.operator B(oprd2)运算符重载为类成员函数运算符重载为类成员函数9例:将例:将“+”、“-”运算重载为复数类的成员函数。运算重载为复数类的成员函数。 规则:实部和虚部分别相加减。规则:实部和虚部分别相加减。 操作数:两个操作数都是复数类对象。操作数:两个操作数都是复数类对象。class complex public: complex(
6、double r=0.0,double i=0.0) real=r; imag=i; complex operator +(complex &c2); complex operator -(complex &c2); void display(); private: double real; double imag;运算符重载为类成员函数运算符重载为类成员函数10complex complex:operator +(complex &c2) complex c; c.real=c2.real+real; c.imag=c2.imag+imag; return c;com
7、plex complex:operator -(complex &c2) complex c; c.real=real-c2.real; /顺序不能颠倒顺序不能颠倒 c.imag=imag-c2.imag; return c;运算符重载为类成员函数运算符重载为类成员函数void complex:display()cout(real,imagi)endl;int main() complex c1(5,4),c2(2,10),c3; cout“c1=”; c1.display(); cout“c2=”; c2.display(); c3=c1-c2; cout“c3=c1-c2=”; c
8、3.display(); c3=c1+c2; cout“c3=c1+c2=”; c3.display(); return 0;c1=(5,4i)c2=(2,10i)c3=c1-c2=(3,-6i)c3=c1+c2=(7,14i)运算符重载为类成员函数运算符重载为类成员函数运算符重载为友元函数运算符重载为友元函数 如果需要重载一个运算符,使之能够用于操作某类对象的如果需要重载一个运算符,使之能够用于操作某类对象的私有成员,可以将此运算符重载为该类的友元函数。私有成员,可以将此运算符重载为该类的友元函数。 函数的形参代表依自左至右次序排列的各操作数。函数的形参代表依自左至右次序排列的各操作数。运算
9、符友元函数的设计运算符友元函数的设计 双目运算符双目运算符B重载后,表达式重载后,表达式 oprd1 B oprd2 等同于等同于 operator B(oprd1 , oprd2)例:将例:将“+”、“-”运算重载为复数类的友元函数。运算重载为复数类的友元函数。 操作数:两个操作数都是复数类对象。操作数:两个操作数都是复数类对象。class complex public: complex(double r=0.0,double i=0.0) real=r; imag=i; friend complex operator +(complex c1,complex c2); friend com
10、plex operator -(complex c1,complex c2); void display(); private: double real; double imag;运算符重载为友元函数运算符重载为友元函数complex operator +(complex c1,complex c2) complex c; c.real=c1.real+c2.real; c.imag=c1.imag+c2.imag; return c;complex operator -(complex c1,complex c2) complex c; c.real=c1.real-c2.real; c.i
11、mag=c1.imag-c2.imag; return c;其他部分同上例。其他部分同上例。运算符重载为友元函数运算符重载为友元函数常用运算符的重载常用运算符的重载1. 前置单目运算符前置单目运算符+和和- 如果要重载如果要重载+或或-为类成员函数,使之能够实现表达式为类成员函数,使之能够实现表达式 + oprd 或者或者 -oprd,其中,其中oprd为为A类对象,则类对象,则+或或-应被应被重载为重载为A类的成员函数,无形参。类的成员函数,无形参。 经重载后,表达式经重载后,表达式 +oprd相当于相当于 oprd.operator +( ) 常用运算符的重载常用运算符的重载例:将前置运算
12、符例:将前置运算符+和和-重载为时钟类的成员函数,重载为时钟类的成员函数, 实现时间增加实现时间增加1秒钟。秒钟。class Clockpublic: Clock(int h=0,int m=0,int s=0):hour(h),minute(m),second(s) void ShowTime() couthour:minute:secondendl; Clock operator +(); /重载重载+(前置)为类的成员函数(前置)为类的成员函数 Clock operator -(); /重载重载-(前置)为类的成员函数(前置)为类的成员函数private: int hour,minute
13、,second;常用运算符的重载常用运算符的重载例:将前置运算符例:将前置运算符+和和-重载为时钟类的成员函数,重载为时钟类的成员函数, 实现时间增加实现时间增加1秒钟。秒钟。class Clockpublic: Clock(int h=0,int m=0,int s=0):hour(h),minute(m),second(s) void ShowTime() couthour:minute:second=60) second=second-60; minute+; if(minute=60) minute=minute-60; hour+; hour=hour%24; return *thi
14、s;Clock Clock:operator -() second-; if(second0) second=59; minute-; if(minute0) minute=59; hour-; hour=23; return *this;常用运算符的重载常用运算符的重载int main() Clock t1(0,0,0),t2,t3(12,59,59),t4; t2=-t1; t1.ShowTime(); t2.ShowTime(); t4=+t3; t3.ShowTime(); t4.ShowTime(); return 0;运行结果:运行结果:23:59:5923:59:5913:0:0
15、13:0:0常用运算符的重载常用运算符的重载2. 后置单目运算符后置单目运算符+和和- 如果要重载如果要重载+或或-为类成员函数,使之能够实现表达式为类成员函数,使之能够实现表达式 oprd+ 或者或者 oprd-,其中,其中oprd为为A类对象,则类对象,则+或或-应被应被重载为重载为A类的成员函数,且具有一个类的成员函数,且具有一个int类型形参。类型形参。 经重载后,表达式经重载后,表达式 oprd+ 相当于相当于 oprd.operator +(0) 常用运算符的重载常用运算符的重载例:将后置运算符例:将后置运算符+和和-重载为时钟类的成员函数,重载为时钟类的成员函数, 实现时间减少实
16、现时间减少1秒钟。秒钟。class Clockpublic: Clock(int h=0,int m=0,int s=0):hour(h),minute(m),second(s) void ShowTime() couthour:minute:second=60) second=second-60; minute+; if(minute=60) minute=minute-60; hour+; hour=hour%24; return t;Clock Clock:operator -(int) Clock t(*this); second-; if(second0) second=59; mi
17、nute-; if(minute0) minute=59; hour-; hour=23; return t;常用运算符的重载常用运算符的重载int main() Clock t1(12,12,12),t2,t3(12,12,12),t4; t2=t1-; t1.ShowTime(); t2.ShowTime(); t4=t3+; t3.ShowTime(); t4.ShowTime(); return 0;运行结果:运行结果:12:12:1112:12:1212:12:1312:12:12常用运算符的重载常用运算符的重载3. 重载流插入和流提取运算符重载流插入和流提取运算符 流插入和提取重载
18、函数不能是类的成员函数,否则左运算流插入和提取重载函数不能是类的成员函数,否则左运算对象就只能是该类型的对象,就会出现如下的错误形式:对象就只能是该类型的对象,就会出现如下的错误形式: acin 如果想要支持正常的形式,则左运算对象就必须为如果想要支持正常的形式,则左运算对象就必须为ostream类型或类型或istream类型。类型。 常用运算符的重载常用运算符的重载class Clockpublic: Clock(int h=0,int m=0,int s=0):hour(h),minute(m),second(s) friend ostream& operator(istream& is,Clock& t);private: in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024福建龙岩农业发展有限公司及所属企业公开招聘(遴选)工作人员5人笔试参考题库附带答案详解
- 2025年油品脱砷特种催化剂项目申请报告模稿
- 2025年航空障碍灯项目申请报告
- 2025年防水建材项目申请报告
- 希沃白板在小学英语课堂教学中的应用
- 《第8节 设计问卷搜集数据》教学设计-2023-2024学年北师大初中信息技术七年级下册
- 1.2治国安邦的总章程(分层作业)-八年级《道德与法治》下册(统编版)
- 第一单元 第2课《互联网应用新特征》教学设计2024-2025学年人教版(2024)初中信息科技七年级上册
- 步级式的分段围墙施工方案
- 2024年福建水投集团罗源水务有限公司招聘3人笔试参考题库附带答案详解
- 高效空调制冷机房智能控制系统技术规程
- 《动物王国开大会》说课PPT
- GB/T 42595-2023承压设备修理基本要求
- 春玉米套种秋黄瓜技术
- 四年级下册劳动技术教案
- 城市轨道交通服务礼仪和意识基本知识
- 科幻小说赏读智慧树知到答案章节测试2023年杭州师范大学
- 公司设备日点检表模板
- (新版)金属冶炼(铅、锌冶炼)主要负责人考试题库(含答案)
- 创新创业基础(杨卫军)第九章 新创企业管理
- GA/T 1920-2021法庭科学疑似毒品中211种麻醉药品和精神药品检验气相色谱-质谱法
评论
0/150
提交评论