C++程序设计 教学课件 作者 郑莉第13章运算符重载.ppt

C++程序设计 教学课件 作者 郑莉第13章运算符重载.ppt

ID:50318762

大小:564.50 KB

页数:45页

时间:2020-03-08

C++程序设计 教学课件 作者 郑莉第13章运算符重载.ppt_第1页
C++程序设计 教学课件 作者 郑莉第13章运算符重载.ppt_第2页
C++程序设计 教学课件 作者 郑莉第13章运算符重载.ppt_第3页
C++程序设计 教学课件 作者 郑莉第13章运算符重载.ppt_第4页
C++程序设计 教学课件 作者 郑莉第13章运算符重载.ppt_第5页
资源描述:

《C++程序设计 教学课件 作者 郑莉第13章运算符重载.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1第13章运算符重载清华大学郑莉2目录13.1运算符重载的规则13.2运算符重载为成员函数13.3运算符重载为非成员函数13.4典型运算符重载示例13.5其它操作符的重载3运算符重载可以对自定义类定义相关的运算符,使其方便地进行对应运算,减少代码量并提升代码的可读性,有助于更容易、更自然地使用类型例如复数类classComplex{public:Complex(doubler=0.0,doublei=0.0){real=r;image=i;}doublereal,image;};两个复数类对象ComplexCom1(1.0,3.5),Com2(4.2,-2.8)

2、;通过运算符重载,可以使用“+”运算符实现Com1和Com2的相加4运算符重载的实质就是函数重载。运算符重载的具体实现过程是:首先把指定的运算表达式转化为对运算符函数的调用,将运算对象转化为运算符函数的实参,然后根据实参的类型确定需要调用的函数,以上过程在编译时完成513.1运算符重载的规则并不是所有运算符都可以重载,而且也不能重载C++中原来没有的运算符非运算符的操作符中,中括号([])、圆括号(())以及流输入输出操作符(<<,>>)都可以重载表13-1可重载的运算符+^,>===-=&=-&=++!=*=

3、=*

4、<--&&/=<<=/~><<

5、

6、%=>>=

7、%!<=>>+=^=613.1运算符重载的规则重载运算符必须至少有一个类类型的操作数。而用于内置类型的运算符的定义不可以改变。不能为任何内置类型定义新的运算符,例如不能定义两个数组的加法运算符例如不可以重载用于整型的加号运算符:intoperator+(int,int);//以上操作违法,不可以重载用于内置类型的运算符713.1运算符重载的规则不能改变运算符在内置类型中对应的优先级例如:a=b+c;无论对于内置类型还是自定义类型,运算顺序都是先将实参b和c绑定到operator+,并将结果作为operator=的右操作数不再具备“短路求值”特性逻辑运算符具有“短

8、路求值”特性(2.1.5节),然而当具有这种特性的运算符重载时,它将不再拥有这种特性,而是计算所有操作数的值,且顺序任意813.1运算符重载的规则运算符的重载形式有两种:重载为类的成员函数、重载为类的友元函数运算符重载为类的成员函数的一般语法形式为:函数类型operator运算符(形参表){函数体}operator是必须包含的关键字,不能省略运算符重载为类的友元函数的一般语法形式为:friend函数类型operator运算符(形参表){函数体}friend关键字用来保证该运算符(函数)能够访问该自定义类的私有变量913.1运算符重载的规则函数类型指定了重载运算符

9、的返回值类型;operator是关键字;运算符就是要重载的运算符名称,例如要重载二元加法运算符,这里就写“+”;形参表给出重载运算符所需要的参数类型例如:例如重载复数类的二元加法时,重载为成员函数的写法是:Complexoperator+(Complex&c);重载为友元函数的写法是:friendComplexoperator+(Complex&c1,Complex&c2);1013.2运算符重载为成员函数运算符重载为类的成员函数时,函数的参数个数比运算符原来的操作数少一个(后置++、--除外),这是因为重载为类的成员函数的话,该类的对象使用此运算符时,相当于在

10、操作数中隐式包含了指向对象本身的this指针,自身的数据可以直接访问,这样就不需要再在参数表中写一个“this”进行传递了重载一元运算符时,操作数由指向对象的this指针提供,因此不需要在参数表中提供任何参数;重载二元运算符时,参数表中的唯一参数默认为右操作数,而将this视为左操作数1113.2运算符重载为成员函数对于一元运算符,例如一元负号“-”等,重载为成员函数时,因为已经隐式包含了this指针,因此不需要在参数表中再附加参数。经过重载以后,表达式opObject相当于调用函数Object.operatorop()对于二元运算符,如果要实现表达式Objec

11、t1opObject2,其中Object1和Object2分别是A类与B类的对象,则需要将op重载为A类的成员函数,并包含一个B类的参数。经过重载以后,表达式Object1opObject2相当于调用函数Object1.operatorop(Object2)1213.2运算符重载为成员函数后置“++”与“--”运算的重载将其重载为类的成员函数时,如果实现表达式Object++或Object--,则需要将运算符重载为类的成员函数,这时函数需要带有一个int类型的参数。重载之后,表达式Object++和Object--分别相当于调用函数Object.operator

12、++(0)和Object

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

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

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