谭浩强《C++程序设计》课件 第10章.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:78 大小:240KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

谭浩强《C++程序设计》课件 第10章.ppt

谭浩强《C++程序设计》课件第10章.ppt

预览

免费试读已结束,剩余 68 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第10章运算符重载所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能。运算符也可以重载。实际上,我们已经在不知不觉之中使用了运算符重载。现在要讨论的问题是:用户能否根据自己的需要对C++已提供的运算符进行重载,赋予它们新的含义,使之一名多用。譬如,能否用“+”号进行两个复数的相加。在C++中不能在程序中直接用运算符“+”对复数进行相加运算。用户必须自己设法实现复数相加。例如用户可以通过定义一个专门的函数来实现复数相加。见例10.1。例10.1通过函数来实现复数相加。#include<iostream>usingnamespacestd;classComplex//定义Complex类{public:Complex(){real=0;imag=0;}//定义构造函数Complex(doubler,doublei){real=r;imag=i;}//构造函数重载Complexcomplex_add(Complex&c2);//声明复数相加函数voiddisplay();//声明输出函数private:doublereal;//实部doubleimag;//虚部};ComplexComplex∷complex_add(Complex&c2){Complexc;c.real=real+c2.real;c.imag=imag+c2.imag;returnc;}voidComplex∷display()//定义输出函数{cout<<″(″<<real<<″,″<<imag<<″i)″<<endl;}intmain(){Complexc1(3,4),c2(5,-10),c3;//定义3个复数对象c3=c1.complex_add(c2);//调用复数相加函数cout<<″c1=″;c1.display();//输出c1的值cout<<″c2=″;c2.display();//输出c2的值cout<<″c1+c2=″;c3.display();//输出c3的值return0;}运行结果如下:c1=(3+4i)c2=(5-10i)c1+c2=(8,-6i)结果无疑是正确的,但调用方式不直观、太烦琐,使人感到很不方便。能否也和整数的加法运算一样,直接用加号“+”来实现复数运算呢?如c3=c1+c2;编译系统就会自动完成c1和c2两个复数相加的运算。如果能做到,就为对象的运算提供了很大的方便。这就需要对运算符“+”进行重载。运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:函数类型operator运算符名称(形参表列){对运算符的重载处理}例如,想将“+”用于Complex类(复数)的加法运算,函数的原型可以是这样的:Complexoperator+(Complex&c1,Complex&c2);在定义了重载运算符的函数后,可以说:函数operator+重载了运算符+。为了说明在运算符重载后,执行表达式就是调用函数的过程,可以把两个整数相加也想像为调用下面的函数:intoperator+(inta,intb){return(a+b);}如果有表达式5+8,就调用此函数,将5和8作为调用函数时的实参,函数的返回值为13。这就是用函数的方法理解运算符。可以在例10.1程序的基础上重载运算符“+”,使之用于复数相加。例10.2改写例10.1,重载运算符“+”,使之能用于两个复数相加。#include<iostream>usingnamespacestd;classComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c2);//声明重载运算符的函数voiddisplay();private:doublereal;doubleimag;};ComplexComplex∷operator+(Complex&c2)//定义重载运算符的函数{Complexc;c.real=real+c2.real;c.imag=imag+c2.imag;returnc;}voidComplex∷display(){cout<<″(″<<real<<″,″<<imag<<″i)″<<endl;}intmain(){Complexc1(3,4),c2(5,-10),c3;c3=c1+c2;//