第11章运算符重载ppt课件

上传人:汽*** 文档编号:571547916 上传时间:2024-08-11 格式:PPT 页数:84 大小:198.50KB
返回 下载 相关 举报
第11章运算符重载ppt课件_第1页
第1页 / 共84页
第11章运算符重载ppt课件_第2页
第2页 / 共84页
第11章运算符重载ppt课件_第3页
第3页 / 共84页
第11章运算符重载ppt课件_第4页
第4页 / 共84页
第11章运算符重载ppt课件_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《第11章运算符重载ppt课件》由会员分享,可在线阅读,更多相关《第11章运算符重载ppt课件(84页珍藏版)》请在金锄头文库上搜索。

1、程序设计 cs.sjtu 2011.9程序设计 - 1第第11章章运算符重载运算符重载v什么是运算符重载什么是运算符重载v运算符重载的方法运算符重载的方法v几个特殊的运算符的重载几个特殊的运算符的重载v自定义类型转换运算符自定义类型转换运算符v运算符重载实例运算符重载实例戚盐肪徒摄霞阎固频篷赋散硫硅慌腿籽昌猾授申柬嘎浅只索碾荒纂簿滁胺第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 2什么是运算符重载什么是运算符重载v使系统内置的运算符可以用于类类型使系统内置的运算符可以用于类类型v例如:例如:+ + 运算符能够实现运算符能够实现2 2个对象间的加。个对象

2、间的加。例如:类例如:类A A的对象的对象a1a1、a2a2、a3a3,希望:,希望: a3 = a1 + a2 a3 = a1 + a2; 即即:分分别别把把对对象象a1a1和和a2a2的的各各个个数数据据成成员员值对应相加,然后赋给对象值对应相加,然后赋给对象a3a3。茁蓟母短坯溉宇楔亥小天猿衡资猜培围杨簿算档控乞冒包玻叮疟芦膘衡莱第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 3问题的提出问题的提出v把把某某些些事事交交给给系系统统去去做做,用用户户只只要要知知道道相加就可相加就可v扩充运算符的功能扩充运算符的功能v增强了增强了C+ C+ 语言的可

3、扩充性语言的可扩充性v使用户定义的类更像系统的内置类型使用户定义的类更像系统的内置类型坑薯坐苞惊游辆扰割篓恍逆呸均霍辽胁筏膏叮肢师单童密巧箍芋摈涣扫释第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 4运算符重载的限制运算符重载的限制v不是所有的运算符都能重载不是所有的运算符都能重载v重载不能改变运算符的优先级和结合性重载不能改变运算符的优先级和结合性v重载不能改变运算符的操作数个数重载不能改变运算符的操作数个数v不能创建新的运算符不能创建新的运算符适矢簇酚扇挡咽俏源罗弧废豢谆里莉脸楞啃滨搂享枫必茧寥伞忿贡朱求淀第11章运算符重载ppt课件程序设计程序设计

4、 cs.sjtu 2011.9程序设计 - 5可以重载的运算符可以重载的运算符+-*/%&|!=+=-=*=/=%=&=|=!=&|+-*,-()newdeletenewdelete肮蛙濒雌吩返改甲磺众魁故扮麓欧甲拯哮智剖摔龚悬馏夷牟匝溃苯杉刘淫第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 6不能重载的运算符不能重载的运算符.*:?:sizeof观桓悄闰矣彰童嗓甲桨态嗜砰赃瞎瓣芳殉吮晃无侥铅或俗逐柒宫烛添铭池第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 7第第11章章运算符重载运算符重载v什么是运算符重载什么是

5、运算符重载v运算符重载的方法运算符重载的方法v几个特殊的运算符的重载几个特殊的运算符的重载v自定义类型转换运算符自定义类型转换运算符v运算符重载实例运算符重载实例暖匪忌井获捆霞严盲撞化肝层鬼挛办奇讶绎鸥诡柒话竭贝绞尊寄浙口吩熟第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 8运算符重载的方法运算符重载的方法v运算符重载就是写一个函数解释某个运算符在运算符重载就是写一个函数解释某个运算符在某个类中的含义某个类中的含义v要使得系统能自动找到重载的这个函数,函数要使得系统能自动找到重载的这个函数,函数名必须要体现出和某个被重载的运算符的联系。名必须要体现出和某

6、个被重载的运算符的联系。vC+中规定,重载函数名为中规定,重载函数名为operator其中,其中,为要重载的运算符。如要重载为要重载的运算符。如要重载“+”运运算符,该重载函数名为算符,该重载函数名为operator+。要重载赋。要重载赋值运算符,函数名为值运算符,函数名为operator=。屹忙燎绒面滞且孵恐瞎吨燕镣冒六册惰砚驶港青址燥锨奈观吻杉晤赛账冈第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 9函数原型v运算符的重载不能改变运算符的运算对象数。因此,重载运算符的重载不能改变运算符的运算对象数。因此,重载函数的形式参数个数(包括成员函数的隐式指针

7、函数的形式参数个数(包括成员函数的隐式指针this)与运)与运算符的运算对象数相同算符的运算对象数相同v运算符重载可以重载成成员函数也可以重载成全局函数实运算符重载可以重载成成员函数也可以重载成全局函数实现。重载成全局函数时,最好把此函数设为友员函数现。重载成全局函数时,最好把此函数设为友员函数v如果作为类的成员函数,它的形式参数个数比运算符的运如果作为类的成员函数,它的形式参数个数比运算符的运算对象数少算对象数少1。这是因为成员函数有一个隐含的参数。这是因为成员函数有一个隐含的参数this。在在C+中,把隐含参数中,把隐含参数this作为运算符的第一个参数。作为运算符的第一个参数。v当把一个

8、一元运算符重载成成员函数时,该函数没有形式当把一个一元运算符重载成成员函数时,该函数没有形式参数。参数。v把一个二元运算符重载成成员函数时,该函数只有一个形把一个二元运算符重载成成员函数时,该函数只有一个形式参数,就是右操作数,当前对象是左操作数。式参数,就是右操作数,当前对象是左操作数。思硷讼躬景饰蓉钨帅墅躺枣丛燥矢谁虑栖您廷涵嘿童吮常获懈迅咀汰婆莲第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 10重载实例重载实例v为为rational类增加类增加“+”和和“*”以及比较以及比较的重载函数,用以替换现有的的重载函数,用以替换现有的add和和multi

9、函数函数掠俺爆虫杰讨犊胞益污逐降凭葫关榴税党滴耳赵陌呕偿歧猴身帝胳摄耶苗第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 11方案一:重载成成员函数方案一:重载成成员函数classRationalprivate:intnum;intden;voidReductFraction();public:Rational(intn=0,intd=1)num=n;den=d;Rationaloperator+(constRational&r1)const;Rationaloperator*(constRational&r1)const;booloperator(con

10、stRational&r1)const;booloperator=(constRational&r1)const;booloperator!=(constRational&r1)const;voiddisplay()coutnum/den;否摇缝涯琼饲桨嘶沟鞠稼贵把捉咽踌茶轴困议贼鬼电护得螺巍霖取总醒女第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 12函数实现函数实现RationalRational:operator+(constRational&r1)constRationaltmp;tmp.num=num*r1.den+r1.num*den;tmp

11、.den=den*r1.den;tmp.ReductFraction();returntmp;RationalRational:operator*(constRational&r1)constRationaltmp;tmp.num=num*r1.num;tmp.den=den*r1.den;tmp.ReductFraction();returntmp;腆咀服野矩鞘厩秃国肺质饱侥睬巢制僵彻裤熏媒徊笼傅哄琉鸡泛呀鬼仗嘲第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 13boolRational:operator(constRational&r1)constr

12、eturnnum*r1.den(constRational&r1)constreturnnum*r1.denden*r1.num;boolRational:operator=(constRational&r1)constreturnnum*r1.den=(constRational&r1)constreturnnum*r1.den=den*r1.num;boolRational:operator!=(constRational&r1)constreturn!(*this=r1);刹郴嘉乙揣总娥攘娥盗维臣灶扩拢筏脯品御雨姻透惭逮缩施兼佬挫鞠碴波第11章运算符重载ppt课件程序设计程序设计 cs.

13、sjtu 2011.9程序设计 - 14方案二:重载成友员函数方案二:重载成友员函数classRationalfriendRationaloperator+(constRational&r1,constRational&r2);friendRationaloperator*(constRational&r1,constRational&r2);friendbooloperator(constRational&r1,constRational&r2);friendbooloperator=(constRational&r1,constRational&r2);friendbooloperator

14、!=(constRational&r1,constRational&r2);private:intnum;intden;voidReductFraction();public:Rational(intn=0,intd=1)num=n;den=d;voiddisplay()coutnum/den;愈沥荒恋彰蔑匡钙糖勒咯掏胎旦瞧台堰粳博探律碟褐岛躯限拘穗裹椒孤稍第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 15函数的实现函数的实现Rationaloperator+(constRational&r1,constRational&r2)Rationaltmp;

15、tmp.num=r1.num*r2.den+r2.num*r1.den;tmp.den=r1.den*r2.den;tmp.ReductFraction();returntmp;Rationaloperator*(constRational&r1,constRational&r2)Rationaltmp;tmp.num=r1.num*r2.num;tmp.den=r1.den*r2.den;tmp.ReductFraction();returntmp;其他函数实现略其他函数实现略是奏陋节酞代臻腑则内去塘肿营翁博腺伙乔舷杀趾犁烟筒济窑遮剔熙付腋第11章运算符重载ppt课件程序设计程序设计 cs.

16、sjtu 2011.9程序设计 - 16重载后有理数类的使用重载后有理数类的使用intmain()Rationalr1(1,6),r2(1,6),r3;r3=r1+r2;r1.display();cout+;r2.display();cout=;r3.display();coutendl;r3=r1*r2;r1.display();cout*;r2.display();cout=;r3.display();cout)必须重载成成员函数。)必须重载成成员函数。v具有赋值意义的运算符,如复合的赋值运算符以及具有赋值意义的运算符,如复合的赋值运算符以及+和和-,不一定非要定义为成员函数,但最好定义为

17、成员函数。,不一定非要定义为成员函数,但最好定义为成员函数。v具有两个运算对象的运算符最好重载为全局函数,这样可具有两个运算对象的运算符最好重载为全局函数,这样可以使得应用更加灵活。如果把加运算定义成全局函数,以使得应用更加灵活。如果把加运算定义成全局函数,r是有理数类的对象,则是有理数类的对象,则2+r是一个合法的表达式。是一个合法的表达式。驼磁酚啥窿湛琅税厄釜屯扭趋劝巡矗窄葱揩潮曾爵娟耘托膳胯梁抱瞎蕴婪第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 18第第11章章运算符重载运算符重载v什么是运算符重载什么是运算符重载v运算符重载的方法运算符重载的方

18、法v几个特殊的运算符的重载几个特殊的运算符的重载v自定义类型转换运算符自定义类型转换运算符v运算符重载实例运算符重载实例遇炕罕桅膝讽耻祟胺揽其炔损吕柬禾沫笆寇粗椭攘欺镀奎亨暴睡徊巧躺望第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 19几个特殊的运算符的重载几个特殊的运算符的重载v赋值运算符赋值运算符v下标运算符下标运算符v函数调用运算符函数调用运算符v+和和运算符的重载运算符的重载v重载函数的原型设计考虑重载函数的原型设计考虑v输入输出运算符重载输入输出运算符重载襄畸煞烂答渠春权失至谱郎吗洞册医演起降萎启瞥尼薄菩诬门来捡年车忌第11章运算符重载ppt课

19、件程序设计程序设计 cs.sjtu 2011.9程序设计 - 20赋值运算符赋值运算符v对任一类,如果用户没有自定义赋值运算对任一类,如果用户没有自定义赋值运算符函数,那么系统为其生成一个缺省的赋符函数,那么系统为其生成一个缺省的赋值运算符函数,在对应的数据成员间赋值。值运算符函数,在对应的数据成员间赋值。v一般情况下,这个缺省的赋值运算符重载一般情况下,这个缺省的赋值运算符重载函数能满足用户的需求。但是,当类含有函数能满足用户的需求。但是,当类含有类型为指针的数据成员时,可能会带来一类型为指针的数据成员时,可能会带来一些麻烦。些麻烦。坠锻涕吞豁相暗砧携烧辗兴沽盼烃怖片付胖混渭竭清珐早著氰面裸

20、姑购谓第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 21对对DoubleArray类对象执行类对象执行array1=array2的问题的问题v会引起内存泄漏会引起内存泄漏v使这两个数组的元素存放于同一块空间中使这两个数组的元素存放于同一块空间中v当这两个对象析构时,先析构的对象会释当这两个对象析构时,先析构的对象会释放存储数组元素的空间。而当后一个对象放存储数组元素的空间。而当后一个对象析构时,无法释放存放数组元素的空间析构时,无法释放存放数组元素的空间嗡初般狗翌宪辕倚端汽杯雾晌物谨莆牛援杉车腻茶竹呀忆戈屉慧碳阂掌御第11章运算符重载ppt课件程序设计

21、程序设计 cs.sjtu 2011.9程序设计 - 22赋值运算符“=”的原型v赋值运算符只能重载成成员函数赋值运算符只能重载成成员函数v函数原型:函数原型:X&X:operator=(constX&source)/赋值过程赋值过程一旦创建了对象一旦创建了对象x1,x2,可以用可以用x1=x2赋值。赋值。壕丑广因玖良猖验侍棕屉乡图亮霸滑熏霓矽伯牙烂君沏列姨篮柑帕爹阂翌第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 23DoubleArray类的类的赋值运算符重载函数赋值运算符重载函数DoubleArray&DoubleArray:operator=(co

22、nstDoubleArray&right)if(this=&right)return*this;deletestorage;low=right.low;high=right.high;storage=newdoublehigh-low+1;for(inti=0;i=high-low;+i)storagei=right.storagei;/复制数组元素复制数组元素return*this;簿蛮贸般匡文咳胯湾匝隧讨预慈鞋铱米激炮阜陌沧灭搏帜酚攘捣润彼匙雍第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 24赋值运算符重载要点赋值运算符重载要点v一般来讲,需要自定

23、义拷贝构造函数的类也需要一般来讲,需要自定义拷贝构造函数的类也需要自定义赋值运算符重载函数。自定义赋值运算符重载函数。v在赋值运算符重载函数中,已经将参数的值赋值在赋值运算符重载函数中,已经将参数的值赋值给了当前对象,那为什么还需要返回值呢?记住,给了当前对象,那为什么还需要返回值呢?记住,在在C+中,赋值是一个运算,它可以形成一个表中,赋值是一个运算,它可以形成一个表达式,而该表达式的结果值就是赋给左边的对象达式,而该表达式的结果值就是赋给左边的对象的值。因此,赋值运算符重载函数必须返回赋给的值。因此,赋值运算符重载函数必须返回赋给左边的对象值。左边的对象值。炙禹绰腑倪靶铜肠帧律湛坍璃吝歧恩

24、弘去止百鼎苞杰猛旋莽刺杰顽兢哉畦第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 25赋值运算符重载和拷贝构造函数赋值运算符重载和拷贝构造函数v一般来讲,需要拷贝构造函数的类也需一般来讲,需要拷贝构造函数的类也需要重载赋值运算符要重载赋值运算符v定义对象时给对象赋初值调用的是拷贝定义对象时给对象赋初值调用的是拷贝构造函数构造函数v程序的语句部分中的赋值语句调用的是程序的语句部分中的赋值语句调用的是赋值运算符重载函数赋值运算符重载函数茅国模淬醉惑艰徐汽邑邯响曼汲欲速霉路吭珠雨埠诽烬罩满厅钠簧糜王肖第11章运算符重载ppt课件程序设计程序设计 cs.sjtu

25、2011.9程序设计 - 26几个特殊的运算符的重载几个特殊的运算符的重载v赋值运算符赋值运算符v下标运算符下标运算符v函数调用运算符函数调用运算符v+和和运算符的重载运算符的重载v重载函数的原型设计考虑重载函数的原型设计考虑v输入输出运算符重载输入输出运算符重载夺骏贾浚癌掏币叁煽壕面右桅拯比秉证葱郴四肥众海鹃邢忧尚派像桓壬自第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 27下标运算符重载下标运算符重载v能否象普通的数组那样通过下标运算操作能否象普通的数组那样通过下标运算操作DoubleArray类的对象,这样可以使类的对象,这样可以使DoubleAr

26、ray类更像一个功能内置的数组。类更像一个功能内置的数组。v可以通过重载下标运算符(可以通过重载下标运算符()来实现)来实现v下标运算符是二元运算符,第一个运算数是数下标运算符是二元运算符,第一个运算数是数组名,第二个运算数是下标值组名,第二个运算数是下标值v下标运算符必须重载成成员函数下标运算符必须重载成成员函数辨宁莲月审单匣烘瞬对跑酵眠痰浊午旅蒲哪解怯舞鞠上钦粕荷睬坤描库敬第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 28DoubleArray类的类的重载重载double&DoubleArray:operator(intindex)if(index

27、high)cout下标越界下标越界;exit(-1);returnstorageindex-low;磁乔顽附淹筑抑础暗墒铱盲集赐幼霍墩牲远勿焦请娄棚障捅谗诫杂匙社拦第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 29DoubleArray类的使用类的使用v定义:定义:DoubleArrayarray(20,30);v数组输入:数组输入:for(i=20;i=30;+i)cout请输入第请输入第iarrayi;v数组输出:数组输出:for(i=20;i=30;+i)coutarrayiend|starthigh)cout下标越界下标越界;exit(-1);

28、DoubleArraytmp(lh,lh+end-start);for(inti=0;iend-start+1;+i)tmp.storagei=storagestart+i-low;returntmp;缩裤枢揣震淘佰刺拄洲甄煽鞍疵联鲸漱蝉侮杜痛决铰鞘镁腥地傍亥诵奇娠第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 35几个特殊的运算符的重载几个特殊的运算符的重载v赋值运算符赋值运算符v下标运算符下标运算符v函数调用运算符函数调用运算符v+和和运算符的重载运算符的重载v重载函数的原型设计考虑重载函数的原型设计考虑v输入输出运算符重载输入输出运算符重载蜜印拼吮

29、椭凿垮综轻荧圾咋撰射齿瑶朴龄伦一绍酥思庞玻阵已耪祟彼泣唱第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 36“+”和“-”重载v、- - -:是一元操作符:是一元操作符v这两个操作符可以是前缀,也可以是后这两个操作符可以是前缀,也可以是后缀。而且前缀和后缀的含义是有区别的。缀。而且前缀和后缀的含义是有区别的。所以,必须有两个重载函数。所以,必须有两个重载函数。 v问题:两个重载函数有相同的原型问题:两个重载函数有相同的原型v区分方法:区分方法: 前缀:一元操作符。前缀:一元操作符。 后缀:二元操作符。后缀:二元操作符。枉娥己贰匈眠好酷篇师帖单最陛湃剔抛谚

30、碘闺痒补彬豢亮犹迹块溪焉乖缕第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 37“+”和和“-”重载重载cont.v成员函数重载成员函数重载+ob重载为:重载为:ob.operator+()ob-重载为:重载为:ob.operator-(int)v友元函数重载友元函数重载+ob重载为:重载为:operator+(X&ob)ob-重重载为:载为:operator-(X&ob,int)v调用时,参数调用时,参数int一般传递给值一般传递给值0。语脆袍朋因鸽泽碍沏烦鸥揭甫驻异偶逻境诬项小撬胸姻充以焦逸秘峦上哀第11章运算符重载ppt课件程序设计程序设计 cs.

31、sjtu 2011.9程序设计 - 38+、-重载实例重载实例v设计一个会报警的计数器类。该计数器设计一个会报警的计数器类。该计数器从从0开始计数,当到达预先设定好的报警开始计数,当到达预先设定好的报警值时,计数器会发出报警消息,计数器值时,计数器会发出报警消息,计数器的值不再增加。的值不再增加。鉴挤念均阅坑属腾阀汁政盏绣税犊房紫凋很拦仅牲揖鬃荫徽捧纯转灵创县第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 39类定义类定义classCounterintvalue;/计数器的值计数器的值intalarm;/报警值报警值public:Counter(inta

32、)value=0;alarm=a;Counter&operator+();/前缀的前缀的+重载重载Counteroperator+(int);/后缀的后缀的+重载重载voidprint()coutvalueendl;阀骗务秸殊悉军较通唤臂熄漓影奋淡搐响悟尧腻语川症矽堡韵浦煌铁植荆第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 40类实现类实现Counter&Counter:operator+()if(value=alarm)cout已超过报警值已超过报警值n;else+value;if(value=alarm)cout已到达报警值已到达报警值n;retu

33、rn*this;CounterCounter:operator+(intx)Countertmp=*this;/保存对象修改前的状态保存对象修改前的状态if(value=alarm)cout已超过报警值已超过报警值n;else+value;if(value=alarm)cout)()和流提取运算符和流提取运算符()()输入和输出用户自定输入和输出用户自定义类的对象义类的对象釉泛流赫徊庞衬翼汪墨厩击抓背鼻寅祟振埠讲雹耶诉翌荫像侧蔽汉慌缨捏第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 48输出重载函数的原型输出重载函数的原型ostream&operator

34、(ostream&os,constClassType&obj)os要输出的内容;要输出的内容;returnos;假押愧屯趴陈漂咕返奖取英咸褥做见谬些匈匡纯煎柔摘饼高塘壕田名砾米第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 49实例实例ostream&operator(ostream&os,constRational&obj)/输出重载函数输出重载函数osobj.num/obj.den;returnos;如定义:如定义:Rationalr(2,6);执行执行cout)()和流提取运算符和流提取运算符()(istream&is,ClassType&obj)

35、is要输入的内容;要输入的内容;returnis;舷致蕴覆挺摄芥礁坞甘妆菜舱纳漱个是眯痰涨予夫册汞伍较直腺裂焕株沛第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 52实例实例istream&operator(istream&in,Rational&obj)/输入重载函数输入重载函数inobj.numobj.den;obj.ReductFraction();returnin;如定义:如定义:Rationalr;可以用可以用cinr从键盘输入从键盘输入r的数据。如输入为:的数据。如输入为:13执行执行cout(istream&in,Rational&obj)

36、;friendostream&operator(ostream&os,constRational&obj);friendRationaloperator+(constRational&r1,constRational&r2);friendRationaloperator*(constRational&r1,constRational&r2);private:intnum;intden;voidReductFraction();public:Rational(intn=0,intd=1)num=n;den=d;operatordouble()constreturn(double(num)/den

37、);妆漳卫类保滓徽例萍贵抓僵拄唇澳舍维哨陨嘿赘早褒啦桂新炙束荫莉斧枢第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 63Rational类的使用类的使用#include#includeRational.hintmain()Rationalr1,r2,r3,r4;doublex;coutr1;coutr2;r3=r1+r2;coutr1+r2=r3endl;r3=r1*r2;coutr1*r2=r3endl;r4=(r1+r2)*r3;cout(r1+r2)*r3的值为:的值为:r4endl;x=5.5-r1;cout5.5-r1的值为:的值为:xendl

38、;cout(r1r2?r1:r2)endl;return0;输入输入r1:13输入输入r2:261/3+1/3=2/31/3*1/3=1/9(r1+r2)*r3的值为的值为2/275.5-r1的值为:的值为:5.166671/3 拷席造箔败渔底阐螟朝坪探裸围捌矿嵌句犯荷相嚼气虾纤炕毖船俏痰炳蹿第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 64第第11章章运算符重载运算符重载v什么是运算符重载什么是运算符重载v运算符重载的方法运算符重载的方法v几个特殊的运算符的重载几个特殊的运算符的重载v自定义类型转换运算符自定义类型转换运算符v运算符重载实例运算符重载

39、实例骸钓沽畏兽爵漳鸵晕徽癌穴炊淬钮侩棋痴象鄙睡扰档返捅徽陶前锭晓恭僳第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 65运算符重载实例运算符重载实例v完善完善DoubleArray类类鹤匠徊亭榴域盟睁宾置晚楚调夸偿岗慢凑誉照凉答随虽大挚纯宜美裁校张第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 66DoubleArray.h#ifndef_array_h#define_array_h#includeclassDoubleArrayfriendostream&operator(istream&is,DoubleArr

40、ay&obj);friendbooloperator=(constDoubleArray&obj1,constDoubleArray&obj2);private:intlow;inthigh;double*storage;晒老侥哎着瘴朔寂惯谴臭漠崔舱哉纹煎啡讲挎姻姐颗畏班诞铃昏喂苦继慈第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 67public:DoubleArray(intlh=0,intrh=0):low(lh),high(rh)storage=newdoublehigh-low+1;DoubleArray(constDoubleArray&ar

41、r);DoubleArray&operator=(constDoubleArray&right);double&operator(intindex);constdouble&operator(intindex)const;DoubleArrayoperator()(intstart,intend,intlh);DoubleArray()deletestorage;#endif视尔滨播火讲烹五宇鸥邻肿潦狮秀疗削拆鸽番权易揩耕棉衔泽驻曝炮过怪第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 68DoubleArray.cpp/文件名:文件名:DoubleArr

42、ay.cpp/DoubleArray类的实现类的实现#include#includeDoubleArray.h“DoubleArray:DoubleArray(constDoubleArray&arr)low=arr.low;high=arr.high;storage=newdoublehigh-low+1;for(inti=0;ihigh-low+1;+i)storagei=arr.storagei;历扣枉莫扇攘纹房羔前扎脉闸卉贺虞壹渡特钢掂倚狠话看吭咖商梦隋审绚第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 69operator=DoubleArra

43、y&DoubleArray:operator=(constDoubleArray&a)if(this=&a)return*this;deletestorage;low=a.low;high=a.high;storage=newdoublehigh-low+1;for(inti=0;i=low&index=low&index=high);returnstorageindex-low;宠兰捌吊盾绿柜头绞牢门搔足攀扒谐艾蓟爪纳华峻寄罪肿访赘骡戳脊意娱第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 71operatorostream&operator(ostre

44、am&os,constDoubleArray&obj)os数组内容为:数组内容为:n;for(inti=obj.low;i=obj.high;+i)osobjit;osistream&operator(istream&is,DoubleArray&obj)cout请输入数组元素请输入数组元素obj.low,obj.high:n;for(inti=obj.low;iobji;returnis;累啡落缩贱唇岸俗蔗饱屠芥彪状滥镐垮巧痈绑柏曰靖款棒摆铺吱惶苦吞涅第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 73operator=booloperator=(co

45、nstDoubleArray&obj1,constDoubleArray&obj2)if(obj1.low!=obj2.low|obj1.high!=obj2.high)returnfalse;for(inti=obj1.low;i=obj1.high;+i)if(obj1i!=obj2i)returnfalse;returntrue;团院晒锑拾悲璃快喇秆沮跌舷度永嫡滁披将疯妨涨领蚀匙贺糊乾过茂椿峡第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 74operator()DoubleArrayDoubleArray:operator()(intstart,

46、intend,intlh)assert(start=low&end=high);DoubleArraytmp(lh,lh+end-start);for(inti=0;iarray1;coutarray1;coutarray1;array2=array1;cout执行执行array2=array1,array2array2;coutarray1=array2是是(array1=array2)?true:false)endl;array225=0;cout执行执行array25=0后后,array1=array2是是(array1=array2)?true:false)endl;array2=ar

47、ray1(22,25,2);cout执行执行array2=array1(22,25,2)后后,array2的值为:的值为:(istream&is,Complex&obj);friendostream&operator(istream&is,Complex&obj)coutobj.real;/利用利用Rational类的输入重载实现实部的输入类的输入重载实现实部的输入coutobj.imag;/利用利用Rational类的输入重载实现虚部的输入类的输入重载实现虚部的输入returnis;ostream&operator(ostream&os,constComplex&obj)/利用利用Rational类的输出重载实现实部和虚部的输出类的输出重载实现实部和虚部的输出cout(obj.real+obj.imagi);returnos;通骡悠墅阑笋非诡丘启风辐澄惶搽淹舌衬耙秩伏沫操申渝这牧浸右惹闯再第11章运算符重载ppt课件程序设计程序设计 cs.sjtu 2011.9程序设计 - 84复数类的使用复数类的使用intmain()Complexx1,x2,x3;coutx1;coutx2;x3=x1+x2;coutx1+x2=x3endl;return0;链剐拣笑盈檀恭蚁蜒强耶栈僵猛沼箭谗笋慨陇贼心色晤诗秦茸渭葫抖搅德第11章运算符重载ppt课件程序设计

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号