第18章 运算符重载.ppt
《第18章 运算符重载.ppt》由会员分享,可在线阅读,更多相关《第18章 运算符重载.ppt(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 1 1 1第第18章章运算符重载2 2为运算符定义新的运算功能,使它除具备有为运算符定义新的运算功能,使它除具备有原来系统规定的功能外,还具备有新定义的原来系统规定的功能外,还具备有新定义的功能。功能。例如运算符例如运算符“”,原来规定它能进行整数,原来规定它能进行整数相加和实数相加功能,我们可以对它进行重相加和实数相加功能,我们可以对它进行重载,使它具有复数相加、矩阵相加、同一个载,使它具有复数相加、矩阵相加、同一个类的对象相加等功能。类的对象相加等功能。2 2运算符重载运算符重载3 3 3 3运算符重载运算符重载运算符重载就是将程序设计语言本身提供的运运算符重载就是将程序设计语言本身提
2、供的运算符的功能进行重定义,使该运算符运用于内算符的功能进行重定义,使该运算符运用于内部基本数据类型的语义和语法同样运用于类对部基本数据类型的语义和语法同样运用于类对象等用户自定义类型象等用户自定义类型有了运算符的重载,编程会更加有个性,程序有了运算符的重载,编程会更加有个性,程序的可读性和可理解性也有所提高的可读性和可理解性也有所提高4 4 4 4classCComplexprivate:doublereal,image;public:CComplex(doubler=0.0,doublei=0.0)real=r;image=i;CComplex&addComplexToItself(con
3、stCComplex&r_c)real+=r_c.real;image+=r_c.image;return*this;voidprint()constif(image0)coutrealimage0)coutreal+imagein;elsecoutrealendl;voidmain()CComplexa(3,4),b(5,6);a=a.addComplexToItself(b);a+=b;/error,运算符+=没有被重载a.print();5 5 5 5CComplexCComplex类定义了一个类定义了一个addComplexToItself()addComplexToItself()成
4、员成员函数实现复数类对象的自增运算函数实现复数类对象的自增运算基本数据类型变量的自增可以用基本数据类型变量的自增可以用+=+=运算符实现运算符实现能否直接对一个能否直接对一个CCompleCComple类对象进行类对象进行+=+=运算运算?如如a+=ba+=b这里的运算符重载问题这里的运算符重载问题怎样重新定义怎样重新定义+=+=运算符运算符的功能使之能对两个复数类对象操作的功能使之能对两个复数类对象操作6 6 6 6运算符重载运算符重载运算符重载是通过函数实现的,运算符的重载运算符重载是通过函数实现的,运算符的重载即函数的重载。运算符重载函数的一般形式为:即函数的重载。运算符重载函数的一般形
5、式为:返回类型返回类型 operator operator 运算符符号运算符符号 (参数说明参数说明););7 7 7 7运算符重载举例运算符重载举例CComplexCComplex类定义一个运算符重载函数类定义一个运算符重载函数 CComplex&operator+=(const CComplex CComplex&operator+=(const CComplex&r_c)&r_c)编译程序将复数类对象的运算表达式转化为对编译程序将复数类对象的运算表达式转化为对运算符重载成员函数的调用,运算的运算符重载成员函数的调用,运算的左操作数左操作数对象作为对象作为成员函数调用的目标对象成员函数调用
6、的目标对象,右操作数右操作数转化为运算符函数的转化为运算符函数的实参实参 a.operator+=(b)a.operator+=(b)编译程序根据函数重载的选择原则对运算符重编译程序根据函数重载的选择原则对运算符重载函数进行选择载函数进行选择8 8 8 8classCComplexprivate:doublereal,image;public:CComplex(doubler=0.0,doublei=0.0)real=r;image=i;CComplex&operator+=(constCComplex&r_c)real+=r_c.real;image+=r_c.image;return*th
7、is;voidprint()constif(image0)coutrealimage0)coutreal+imagein;elsecoutrealendl;voidmain()CComplexa(3,4),b(5,6);a+=b;a.print();9 9 9 9运算符重载的限制运算符重载的限制只能重载已经存在的只能重载已经存在的C+运算符运算符运算符重载不能改变运算符操作数的个数,优先级运算符重载不能改变运算符操作数的个数,优先级和结合性和结合性运算符的操作数必须至少有一个某个类的类对象,运算符的操作数必须至少有一个某个类的类对象,否则不能对运算符进行重载否则不能对运算符进行重载重载运算符不
8、可以使用缺省参数;重载运算符不可以使用缺省参数;除了赋值运算符除了赋值运算符=外,重载运算符可由派生类继承外,重载运算符可由派生类继承下去;下去;10101010运算符重载的限制运算符重载的限制下列运算符不能重载:下列运算符不能重载:作用域运算符作用域运算符:成员对象选择运算符成员对象选择运算符.*类对象选择运算符类对象选择运算符.条件运算符条件运算符?:11111111运算符重载函数作为类的成员函数运算符重载函数作为类的成员函数运算符重载函数可以通过运算符重载函数可以通过2种形式实现:种形式实现:类成员函数类成员函数友元函数友元函数1212编译程序处理成员函数时,为它设置了一个编译程序处理成
9、员函数时,为它设置了一个this指针。指针。在重载运算符函数中,默认在重载运算符函数中,默认this指针对应的指针对应的缺省参数就是其中之一个参数缺省参数就是其中之一个参数对于一元运算符函数使用的就是规定的对于一元运算符函数使用的就是规定的this指针指针所指的参数(自身的参数)所指的参数(自身的参数)对于二元运算符对应是二元运算的左操作数。对于二元运算符对应是二元运算的左操作数。1212运算符重载函数作为类的成员函数运算符重载函数作为类的成员函数13131313运算符重载函数作为类的成员函数运算符重载函数作为类的成员函数当运算符重载函数定义为其操作数所属类的当运算符重载函数定义为其操作数所属
10、类的成员函数成员函数时,参数的个数要比运算符的操作时,参数的个数要比运算符的操作数个数数个数少一个少一个。重载一元运算符,不再显式指明参数;重载一元运算符,不再显式指明参数;重载二元运算符时,只需显式指明一个参重载二元运算符时,只需显式指明一个参数;数;二元运算符以成员函数形式重载二元运算符以成员函数形式重载,左操作数左操作数必必须为类对象须为类对象,目标对象作为左操作数目标对象作为左操作数14141414运算符重载函数作为类的成员函数运算符重载函数作为类的成员函数成员运算符重载函数在类中的声明格式为:成员运算符重载函数在类中的声明格式为:class X operator ();;成员运算符重
11、载函数在类外定义的格式为:成员运算符重载函数在类外定义的格式为:X:operator ()15151515class CComplexprivate:double real,image;public:CComplex(double a=0.0,double b=0.0)real=a;image=b;CComplex(const CComplex&r)real=r.real;image=r.image;void print()const;const CComplex&operator+=(const CComplex&r_c);const CComplex&operator+=(double c
12、);CComplex operator+(const CComplex&r_c)const;CComplex operator+(double c)const;const CComplex&operator+();/前缀前缀 CComplex operator+(int);/后缀后缀;1.CComplex1.CComplex类中哪些是运算符重载成员函数类中哪些是运算符重载成员函数?2.2.判断各运算符重载成员函数是怎样被调用的判断各运算符重载成员函数是怎样被调用的?3.3.说明说明constconst在各个成员函数中的用法在各个成员函数中的用法4.4.总结运算符重载成员函数函数原型的确定规总结
13、运算符重载成员函数函数原型的确定规则则(函数的返回类型、函数名和函数参数函数的返回类型、函数名和函数参数)5.5.注意自增运算符前缀与后缀的不同注意自增运算符前缀与后缀的不同16161616运算符重载函数作为友元函数运算符重载函数作为友元函数运算符重载函数可以用运算符重载函数可以用友元函数友元函数的形式来实的形式来实现。现。函数参数的个数与运算符的操作数个数函数参数的个数与运算符的操作数个数相同相同第一个参数表示左操作数第一个参数表示左操作数第二个参数表示右操作数第二个参数表示右操作数第一个参数类型为类对象的引用第一个参数类型为类对象的引用赋值运算符赋值运算符=、下标运算符、下标运算符、成员、
14、成员选择运算符选择运算符-和函数调用运算符和函数调用运算符()等等不能用友元函数形式重载不能用友元函数形式重载17171717运算符重载函数作为友元函数运算符重载函数作为友元函数友元运算符重载函数在类中的声明格式为:友元运算符重载函数在类中的声明格式为:class X friend operator ();;友元运算符重载函数在类外定义的格式为:友元运算符重载函数在类外定义的格式为:operator ()18181818classCComplexprivate:doublereal,image;public:CComplex(doublea=0.0,doubleb=0.0)real=a;ima
15、ge=b;CComplex(doublec)real=c;image=0.0;voidprint()const;friendvoidoperator+=(CComplex&r_x,constCComplex&r_y);friendCComplexoperator+(constCComplex&r_x,constCComplex&r_y);friendCComplex&operator+(CComplex&r_x);friendCComplexoperator+(CComplex&r_x,int);1.CComplex1.CComplex类的构造函数什么时类的构造函数什么时候被调用候被调用?2.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第18章 运算符重载 18 运算 重载
限制150内