




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、主要内容 1 运算符重载的需要性 2 运算符重载 3 运算符成员函数的设计 4 运算符友元函数的设计1第1页/共29页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; /虚部虚部;uComplex的对象进行的对象进行“+”“”“-”运算的方法:运算的方法:重载重载“+”“”“-”运算符。运算符。第2页
2、/共29页2 运算符重载p运算符重载的是对已有的运算符赋予多重涵义p必要性C+C+中预定义的运算符, ,其运算对象只能是基本数据类型,而不适用于用户自定义类型p实现机制将指定的运算表达式转换为对运算符函数的调用,运算对象转化为运算符函数的实参。编译系统对重载运算符的选择,遵循函数重载的选择原则。3第3页/共29页运算符重载的规则和限制p可以重载C+C+中除下列运算符外的所有运算符:. : . : .* * .- ?: .- ?:p只能重载C+C+中已有的运算符,不能创造新的运算符。p运算符重载不改变原运算符的优先级和结合性。p不能改变操作数的个数。p经重载的运算符,其操作数中至少应该有一个是自
3、定义的类型。4第4页/共29页运算符重载的两种形式p重载为类成员函数p重载为友元函数5第5页/共29页运算符函数p声明形式函数类型 operator 运算符(形参)u重载为类成员函数时参数个数= =原操作数个数-1-1(后置+、-除外)u重载为友元函数时:参数个数= =原操作数个数并且至少应该有一个自定义类型的形参。6第6页/共29页u双目运算符 M M(如“+ +”)u如果要重载 M M 为类的成员函数,使之能实现表达式 oprd1 M oprd2,其中,oprd1oprd1为A A类的对象,则M M应被重载为A A类的成员函数,形参类型应该是oprd2oprd2所属的类型。u经 重 载 后
4、 , 表 达 式 o p r d 1 M o p r d 2 相 当 于 o p r d 1 . o p e r a t o r M(oprd2)73 运算符成员函数的设计第7页/共29页将“+”、“-”运算符重载为复数类的成员函数。u规则: 实部和虚部分别相加减,并将结果值返回。u操作数: 两个操作数都是复数类的对象u返回类型:复数类对象8例1第8页/共29页9class Complex /复数类public:Complex(double r=0.0,double i=0,0)real=r;imag=i; Complex operator +(Complex c2); /运算符重载Compl
5、ex operator -(Complex c2);void Display()/显示复数的值 cout“(”real“,”imag“)”endl; private:double real;double imag;第9页/共29页10/重载运算符成员函数的实现Complex Complex :operator +(Complex c2)Complex c;c.real = real + c2.real;c.imag = imag + c2.imag;return Complex(c.real,c.imag);Complex Complex : operator -(Complex c2)Com
6、plex c;c.real = real - c2.real;c.imag = imag - c2.imag;return c;第10页/共29页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=”;c3.display();c3 = c1 + c2; /使用重载运算符完成复数加法cout“c3=c1+c2=”;c3.display();运行结果:c1=(5,4)c2=(2,10)c3=c1
7、-c2=(3,-6)c3=c1+c2=(7,14)11第11页/共29页u前置单目运算符 U U(如“+i+i”)u如果要重载 U U 为类的成员函数,使之能实现表达式 U oprd,其中,oprdoprd为A A类的对象,则U U应被重载为A A类的成员函数,无形参。u经重载后,表达式 U oprd 相当于oprd.operator U()123 运算符成员函数的设计第12页/共29页u后置单目运算符 +和-(如“i+i+”)u如果要重载 +和- - 为类的成员函数,使之能实现表达式 oprd+ 或 oprd- ,其中,oprdoprd为A A类的对象,则+或-应被重载为A A类的成员函数,
8、且具有一个intint型的形参(不必写形参名,仅为了与前置单目运算符区分)。u经重载后,表达式 oprd+ 相当于oprd.operator +(0)133 运算符成员函数的设计第13页/共29页将前置“+”和后置“+”运算符重载为时钟类的成员函数。u前置单目运算符,重载函数没有形参;对于后置单目运算符,重载函数需要一个整型形参。u操作数:时钟类的对象u实现时间增加1秒钟.14例2第14页/共29页15class Clock /复数类public:Clock(int newH=0,int newM=0,int newS=0)Hour=newH; Minute=newM; Second=newS
9、;void operator +(); /运算符重载void operator +(int);void ShowTime() /显示复数的值 coutHour“:”Minute“:”Second=60)Second = Second - 60;Minute+;if(Minute=60)Minute= Minute-60;Hour+;Hour=Hour%24;cout=60)Second = Second - 60;Minute+;if(Minute=60)Minute= Minute-60;Hour+;Hour=Hour%24;cout“Clock+:”;第17页/共29页int main()
10、Clock myClock(12,15,59);cout“First time output:”; myClock.ShowTime();myClock+; /重载运算符完成时间加1秒m y C l o c k . S h o w T i m e ( ) ; +myClock; /重载运算符完成时间加1秒myClock.ShowTime();运行结果:First time output:12:15:59Clock+:12:16:00+Clock:12:16:0118第18页/共29页将“+”、“-”运算符重载为复数类的成员函数。u规则: 实部和虚部分别加1或减1.u操作数: 一个,复数类的对象
11、u返回类型:前置:当前对象引用 后置:操作前的对象值19例3第19页/共29页20class Complex /复数类public:Complex(double r=0.0,double i=0,0)real=r;imag=i; Complex& operator +();Complex operator +(int);void Display()/显示复数的值 cout“(”real“,”imag“)”endl; private:double real;double imag;第20页/共29页21/重载运算符成员函数的实现Complex& Complex :operator
12、 +()real+;imag+;return *this; /返回原对象Complex Complex : operator +(int)Complex temp(real, imag); real+; /原对象值+1 imag+; return temp; /返回原对象的值第21页/共29页int main()Complex c1(5,4);coutc1:; c1.display();cout+c1:; (+c1).display();coutc1:; c1.display();coutc1+:; (c1+).display();coutc1:; c1.display();运行结果:c1:(
13、5,4)+c1:(6,5)c1:(6,5)c1+:(6,5)c1:(7,6)22第22页/共29页4 运算符友元函数的设计如果需要重载一个运算符,使之能够用于操作某类对象的私有成员,可以将此运算符重载为该类的友元函数。函数的形参代表从左至右排列的各个操作数。后置单目运算符+和的重载函数,形参列表要增加一个int,但不必写形参名。23第23页/共29页4 运算符友元函数的设计双目运算符B重载后,表达式 oprd1 B oprd2等同于operator B(oprd1,oprd2)前置单目运算符B重载后,表达式 B oprd等同于 operator B(oprd)后置单目运算符+和-重载后,表达式
14、 oprd B等同于 operator B(oprd,0)24第24页/共29页将“+”、“-”运算符重载为复数类的友元函数。u规则: 实部和虚部分别相加减u操作数: 两个操作数都是复数类的对象25例4第25页/共29页26class Complex /复数类public: Complex(double r=0.0,double i=0,0) real=r;imag=i; /友元运算符函数声明 friend Complex operator +(Complex c1, Complex c2); friend Complex operator -(Complex c1, Complex c2);
15、 void Display() /显示复数的值 cout“(”real“,”imag“)”endl; private:double real;double imag;第26页/共29页27/重载运算符成员函数的实现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.imag = c2.imag - c2.imag;return c;第27页/共29页int main()Complex c1(5,4),c2(2,10),c3;cout“c1=”;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小班家园共育活动方案计划
- 特许投资分析中的技术应用试题及答案
- 2024年计算机二级重要策略试题及答案
- 2024年流程优化在投资中的应用试题及答案
- 生态保护区的选址与地理因素-试题及答案
- 电子商务职教市场的品牌建设与形象传播试题及答案
- 城市化进程对环境影响试题及答案
- 动物非感染性疾病新知试题及答案
- 2024互联网营销师效率提升试题及答案
- 2024年人力资源管理师考题解析试题及答案
- 2024年计算机二级WPS考试题库(共380题含答案)
- 汉字的奥秘探索
- 《海上风电设备运输规范》
- 2024年江苏省徐州市中考数学真题卷及答案解析
- 2025届云南省民族大学附属中学高三(最后冲刺)数学试卷含解析
- 湖北省七市2025届高三下学期第五次调研考试数学试题含解析
- 2024年太阳能电池片产业海外专利预警分析报告
- 2023河南专升本英语真题及答案
- 河流沿岸护栏安装工程协议
- 前庭阵发症-讲稿
- 第十三届全国交通运输行业城市轨道交通列车司机(学生组)职业技能大赛技术方案
评论
0/150
提交评论