收藏 分销(赏)

第十八章 运算符的重载.doc

上传人:xrp****65 文档编号:5963979 上传时间:2024-11-24 格式:DOC 页数:6 大小:30KB
下载 相关 举报
第十八章 运算符的重载.doc_第1页
第1页 / 共6页
第十八章 运算符的重载.doc_第2页
第2页 / 共6页
第十八章 运算符的重载.doc_第3页
第3页 / 共6页
第十八章 运算符的重载.doc_第4页
第4页 / 共6页
第十八章 运算符的重载.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、第十八章 运算符的重载运算符重载就是赋予已有的运算符多重含义。C+中通过重新定义运算符,使它能够用于特定类的对象执行特定的功能。例如,通过对+,*,/ 运算符的重新定义,使它们可以完成复数、分数等不同类的对象的加减乘除运算操作。这便增强了C+语言的处理能力。181运算符重载的几个问题1、 哪些运算符可以重载?几乎所有的运算符都可以重载,除了以下的几个运算符:, : ,?:2、 运算符重载后,优先级和结合性如何?用户重新定义运算符,不改变原运算符的的优先级和结合性。同时运算符重载后,也不改变运算符的语法结构,即单目运算符只能重载为单目运算符,双目运算符只能重载为双目运算符。3、 编译程序如何选用

2、运算符函数?在每一种编译系统中,运算符实际上都对应一个函数,只是这种运算对用户具有透明性,使用者并不知道函数的存在。运算符重载实际上是运算符函数的重载,所以运算符的重载实际上是函数的重载。编译程序对运算符重载的选择,遵循着函数重载的选择原则。当遇到不很明显的运算符时,编译程序将去寻找参数相匹配的运算符函数。4、 重载运算符有哪些限制?(1) 不可臆造新的运算符(2) 坚持四个不能改变。l 不能改变运算符原有的优先级l 不能改变运算符原有的结合性l 不能改变运算符原有的语法结构l 不能改变运算符原有的操作数个数但允许改变运算符的返回类型(3)C+规定,运算符中,参数类型都是内部类型时,不允许重载

3、。 “:、*、-、?:”这五个运算符不能重载。5、 运算符重载必须遵循哪些原则?运算符重载可以使程序更加简洁,使表达式更加直观,增强可读性。但是,运算符重载使用不宜过多,否则会带来一定的麻烦。运算符重载必须遵循以下原则:(1) 重载运算符含义必须清楚。(2) 重载运算符不能有二义性。182 运算符重载的定义格式两种形式运算符重载的定义格式:返回类型 operator 运算符号(参数说明);例1:为A类定义一个“+”运算符重载函数class A.;A operate +(A&);.;例2:为A类定义一个“+”运算符重载函数class A.;friend A operate +(A&,A&);.;

4、183 运算符重载的两种形式运算符重载的函数有两种形式:成员函数形式和友元函数形式。1、 重载为成员函数例1831 下面程序定义一个Time类用来保存时间(时、分、秒),通过重载操作符“+”实现两个时间的相加。#include class Timepublic: Time() hours=0;minutes=0;seconds=0; /无参构造函数 Time(int h, int m,int s) /重载构造函数 hours=h; minutes=m; seconds=s; Time operator +(Time&); /操作符重载为成员函数,返回结果为Time类 void gettime(

5、);private: int hours,minutes,seconds;Time Time:operator +(Time& time)int h,m,s;s=time.seconds+seconds;m=time.minutes+minutes+s/60;h=time.hours+hours+m/60;Time result(h,m%60,s%60);return result;void Time:gettime()couthours:minutes:secondsendl;void main( )Time t1(8,51,40),t2(4,15,30),t3;t3=t1+t2;t3.ge

6、ttime();输出结果:13:7:10例1832 下面程序用来实现复数的加法运算即:(x+yi)+(a+bi)=(x+a)+(y+b)ix+yi+a=(x+a)+yi#include class complexpublic: complex( ) real=imag=0; complex(double r, double i=0) /虚部可以省略 real=r;imag=i; complex operator +(complex & c); friend void print(complex &c);private: double real,imag;complex complex:oper

7、ator +(complex & c)return complex(real+c.real,imag+c.imag);void print(complex &c)coutc.real+c.imagiendl;void main( )complex c1(2.0,3.0),c2(4.0,-2.0),c3;c3=c1+c2;print(c3);c3=c3+complex(3.5);print(c3);输出结果:6+1i2、操作符重载为友元函数形式例1833 下面程序修改了例18.3.1,将操作符重载为友元函数实现#include class Timepublic: Time() hours=0;m

8、inutes=0;seconds=0; /无参构造函数 Time(int h, int m,int s) /重载构造函数 hours=h; minutes=m; seconds=s; friend Time operator +(Time&,Time&); /重载运算符为友元函数形式 void gettime( );private: int hours,minutes,seconds;Time operator +(Time& time1,Time& time2)int h,m,s;s=time1.seconds+time2.seconds; /计算秒数m=time1.minutes+time

9、2.minutes+s/60; /计算分数h=time1.hours+time2.hours+m/60; /计算小时数Time result(h,m%60,s%60);return result;void Time:gettime( )couthours:minutes:secondsendl;void main( )Time t1(8,51,40),t2(4,15,30),t3;t3=t1+t2;t3.gettime( );输出结果:13:7:10例1834 下面程序用友元函数实现复数的加法运算#include class complexpublic: complex( ) real=ima

10、g=0; complex(double r, double i=0) /虚部可以省略 real=r;imag=i; friend complex operator +(complex & c1,complex &c2); friend void print(complex &c);private: double real,imag;complex operator +(complex & c1, complex &c2)return complex(c1.real+c2.real,c1.imag+c2.imag);void print(complex &c)coutc.real+c.imagiendl;void main( )complex c1(2.0,3.0),c2(4.0,-2.0),c3;c3=c1+c2;print(c3);c3=c3+complex(3.5);print(c3);输出结果:6+1i9.5+1i3、其它运算符的重载

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服