谭浩强《C++程序设计》课件第10章.ppt
《谭浩强《C++程序设计》课件第10章.ppt》由会员分享,可在线阅读,更多相关《谭浩强《C++程序设计》课件第10章.ppt(78页珍藏版)》请在第壹文秘上搜索。
1、第10章 运算符重载10.1 什么是运算符重载10.2 运算符重载的方法10.3 重载运算符的规则10.4 运算符重载函数作为类成员函数和友元函数10.5 重载双目运算符10.6 重载单目运算符10.7 重载流插入运算符和流提取运算符10.8 不同类型数据间的转换10.1 什么是运算符重载所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能。运算符也可以重载。实际上,我们已经在不知不觉之中使用了运算符重载。现在要讨论的问题是: 用户能否根据自己的需要对C+已提供的运算符进行重载,赋予它们新的含义,使之一名多用。譬如,能否用“+”号进行两个复数的相加。在C+中
2、不能在程序中直接用运算符“+”对复数进行相加运算。用户必须自己设法实现复数相加。例如用户可以通过定义一个专门的函数来实现复数相加。见例10.1。例10.1 通过函数来实现复数相加。#INCLUDE USING NAMESPACE STD;CLASS COMPLEX /定义COMPLEX类PUBLIC:COMPLEX( )REAL=0;IMAG=0; /定义构造函数COMPLEX(DOUBLE R,DOUBLE I)REAL=R;IMAG=I; /构造函数重载COMPLEX COMPLEX_ADD(COMPLEX &C2); /声明复数相加函数VOID DISPLAY( ); /声明输出函数 P
3、RIVATE:DOUBLE REAL; /实部DOUBLE IMAG; /虚部;COMPLEX COMPLEX COMPLEX_ADD(COMPLEX &C2)COMPLEX C;C.REAL=REAL+C2.REAL;C.IMAG=IMAG+C2.IMAG;RETURN C; VOID COMPLEX DISPLAY( ) /定义输出函数COUT(REAL,IMAGI)ENDL;INT MAIN( )COMPLEX C1(3,4),C2(5,-10),C3; /定义3个复数对象C3=C1.COMPLEX_ADD(C2); /调用复数相加函数COUTC1=; C1.DISPLAY( ); /输
4、出C1的值COUTC2=; C2.DISPLAY( ); /输出C2的值COUTC1+C2=; C3.DISPLAY( ); /输出C3的值RETURN 0;运行结果如下: C1=(3+4I)C2=(5-10I)C1+C2=(8,-6I)结果无疑是正确的,但调用方式不直观、太烦琐,使人感到很不方便。能否也和整数的加法运算一样,直接用加号“+”来实现复数运算呢?如C3=C1+C2;编译系统就会自动完成C1和C2两个复数相加的运算。如果能做到,就为对象的运算提供了很大的方便。这就需要对运算符“+”进行重载。10.2 运算符重载的方法运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算
5、符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下: 函数类型 OPERATOR 运算符名称 (形参表列) 对运算符的重载处理 例如,想将“+”用于COMPLEX类(复数)的加法运算,函数的原型可以是这样的: COMPLEX OPERATOR+ (COMPLEX& C1,COMPLEX& C2);在定义了重载运算符的函数后,可以说: 函数OPERATOR+重载了运算符+。为了说明在运算符重载后,执行表达式就是调用函数的过程,可以把两个整数相加也想像为调用下面的函数: INT OPERATOR + (
6、INT A,INT B)RETURN (A+B);如果有表达式5+8,就调用此函数,将5和8作为调用函数时的实参,函数的返回值为13。这就是用函数的方法理解运算符。可以在例10.1程序的基础上重载运算符“+”,使之用于复数相加。例10.2 改写例10.1,重载运算符“+”,使之能用于两个复数相加。#INCLUDE USING NAMESPACE STD;CLASS COMPLEXPUBLIC:COMPLEX( )REAL=0;IMAG=0;COMPLEX(DOUBLE R,DOUBLE I)REAL=R;IMAG=I;COMPLEX OPERATOR+(COMPLEX &C2); /声明重载运
7、算符的函数VOID DISPLAY( ); PRIVATE:DOUBLE REAL;DOUBLE IMAG;COMPLEX COMPLEX OPERATOR+(COMPLEX &C2) /定义重载运算符的函数 COMPLEX C;C.REAL=REAL+C2.REAL;C.IMAG=IMAG+C2.IMAG;RETURN C;VOID COMPLEX DISPLAY( ) COUT(REAL,IMAGI)ENDL;INT MAIN( ) COMPLEX C1(3,4),C2(5,-10),C3;C3=C1+C2; /运算符+用于复数运算COUTC1=;C1.DISPLAY( );COUTC2=
8、;C2.DISPLAY( );COUTREAL+C2.REAL,THIS-REAL就是C1.REAL。在10.2节中已说明,在将运算符函数重载为成员函数后,如果出现含该运算符的表达式,如C1+C2,编译系统把它解释为C1.OPERATOR+(C2) 即通过对象C1调用运算符重载函数,并以表达式中第二个参数(运算符右侧的类对象C2)作为函数实参。运算符重载函数的返回值是COMPLEX类型,返回值是复数C1和C2之和(COMPLEX(C1.REAL + C2.REAL,C1.IMAG+C2.IMAG)。运算符重载函数除了可以作为类的成员函数外,还可以是非成员函数。可以将例10.2改写为例10.3。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+程序设计 谭浩强 C+ 程序设计 课件 10
