《运算符重载》PPT课件.ppt

《运算符重载》PPT课件.ppt

ID:52110308

大小:358.50 KB

页数:97页

时间:2020-03-31

《运算符重载》PPT课件.ppt_第1页
《运算符重载》PPT课件.ppt_第2页
《运算符重载》PPT课件.ppt_第3页
《运算符重载》PPT课件.ppt_第4页
《运算符重载》PPT课件.ppt_第5页
资源描述:

《《运算符重载》PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1第十八章运算符重载2本章主要内容运算符重载的需要性重载运算符作友元函数运算符作成员函数增量运算符重载转换运算符重载赋值运算符重载3C++认为用户定义的数据类型就像基本数据类型int和char一样有效。运算符(如+,-,*,/)是为基本数据类型定义的,为什么不允许使之适用于用户定义类型呢?例如:classA{public:A(intx){a=x;}//};Aa(5),b(10),c;c=a+b;//类对象也应能运算运算符重载可以改进可读性,但不是非有不可。4多态性的实现:函数重载虚函数运算符重载在基本类型上,系统提供了许多预定义的运算符(如+、-、*、/)。5问题举例——复数的运算clas

2、scomplex//复数类声明{public:complex(doubler=0.0,doublei=0.0){real=r;imag=i;} voiddisplay();//显示复数的值private:doublereal;doubleimag;};用“+”、“-”能够实现复数的加减运算吗?实现复数加减运算的方法——重载“+”、“-”运算符必要性C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)。运算符重载可提高程序的可读性。下列例子计算应付给的人民币,分别用了成员函数和运算符成员函数两种方法classRMB{public:RMB(doubled){yu

3、an=d;jf=(d-yuan)/100;}RMBinterest(doublerate);//计算利息RMBadd(rmbd);//人民币加RMBoperator+(RMBd){//人民币加的运算符重载returnRMB(yuan+d.yuan+(jf+d.jf)/100;}RMBoperator*(doublerate){returnRMB((yuan+jf/100)*rate);}private:unsignedintyuan;//元unsignedintjf;//角分};RMBRMB::interest(doublerate){returnRMB((yuan+jf)/100.0)*

4、rate);}RMBRMB::add(RMBd){returnRMB(yuan+d.yuan+jf/100.0+d.jf/100.0);}//以下是计算应付人民币的两个版本RMBexpense1(RMBprinciple,doublerate){RMBinterest=principle.interest(rate);returnprinciple.add(interest);}RMBexpense2(RMBprinciple,doublerate){RMBinterest=principle*rate;returnprinciple+interest;}9voidmain(){RMBx=

5、10000.0;doubleyrate=0.035;expense1(x,yrate).display();expense2(x,yrate).display();}运行结果为:2035010350expense()的两个版本都可以计算应付人民币,运行结果相同。expense2()可读性更好一点,它符合我们计算用+,*运算符的习惯。如果不定义运算符重载,则expense2()中principal*rate和principal+interest是非法的。因为参加运算的是类对象而不是浮点值。10运算符重载的实质运算符重载是对已有的运算符赋予多重含义。实现机制运算符重载的实质就是函数重载:每个运

6、算符对应各自的运算符函数,根据操作数的不同调用不同的同名函数。将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。11规则和限制编译系统对重载运算符的选择,遵循函数重载的选择原则。可以重载C++中除下列运算符外的所有运算符:..*.>::?:只能重载C++语言中已有的运算符,不可臆造新的。不改变原运算符的优先级和结合性。不能改变操作数个数。经重载的运算符,其操作数中至少应该有一个是自定义类的对象或是对类的对象的引用。12运算符重载的两种形式重载为类的友元函数:friend类型operator运算符(形参表){函数体}重载为类的成员函数:类型operator运算符(形

7、参表){函数体}13如何重载运算符运算符是在C++系统内部定义的,具有特定语法规则,如参数说明,运算顺序,优先级等。重载运算符时,要注意该重载运算符的运算顺序和优先级不变14classA{public:A(intn){//...}operator+(Aa,A&){//...}operator*(Aa,AA){//...}//...};15Aa=5,b=6,c=7,d=8,e;e=a+b*c+d;//即(a+(b*c))+

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。