预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

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

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

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

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

运算符重载 运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。 1运算符重载为成员函数AX++ 运算符重载实质上是函数的重载,重载运算符的函数一般格式如下: 函数类型operator运算符名称(形参表列){对运算符的重载处理} 例如,想将“+”用于Complex(复数)的加法运算,函数的原型可以是这样的: Complexoperator+(Complex&c1,Complex&c2); 其中,operator是关键字,是专门用于定义重载运算符的函数的,运算符名称就是C++提供给用户的预定运算符。 注意:函数名是由operator和运算符组成。 上面的operator+就是函数名,意思是“对运算符+重载“。只要掌握这点,这可以发现,这类函数和其他函数在形式上没有什么区别。 两个形参是Complex类对象的引用,要求实参为Complex类对象。 在定义了重载运算符后,可以说:函数operator+重载了运算符+。 在执行复数相加的表达式c1+c2时(假设c1+c2都已被定义为Complex),系统就会调用operator+函数,把c1+c2作为实参,与形参进行虚实结合。 为了说明把运算符重载后,执行表达式就是调用函数的过程,可以把两个整数相加也想象称为调用下面的函数: 代码如下:intoperator+(inta,intb){return(a+b); }如果有表达式5+8,就调用此函数,将5和8作为调用函数时的形参,函数的返回值为13,这就是通过函数的方法理解运算符。 例1:运算符重载实现两个坐标点的加运算 classPoint{ intx,y; public: Point(){} Point(intI,intj){x=i;y=j;} voiddisp(){cout<<“(“<<x<<”,”<<y<<”)”<<endl;} Pointoperator+(Point&p){returnPoint(x+p.x,y+p.y);} }; voidmain(){ Pointp1(3,4),p2(2,9),p3; p3=p1+p2; p3.disp(); } 例2:运算符重载实现复数的加、减、乘、除和赋值运算。 //examplech707.cpp #include<iostream.h> #include<math.h> classComplex //复数类 { public: Complex(doubler=0.0,doublei=0.0){Real=r;Imag=i;} doubleGetReal(){returnReal;} //返回复数的实部 doubleGetImag(){returnImag;} //返回复数的虚部 Complexoperator+(Complex&c); //复数加复数 Complexoperator+(doubled); //复数加实数 Complexoperator-(Complex&c); //复数减复数 Complexoperator*(Complex&c); Complexoperator/(Complex&c); Complexoperator=(Complexx); //复数对象=复数 voiddisplay(); private: doubleReal,Imag; //私有数据成员 }; //Complexc1(3,5),c2(2,7),c3;c3=c1-c2; voidComplex::display(){ cout<<Real<<"+j"<<Imag<<endl;} ComplexComplex::operator+(Complex&c) //重载运算符"+",两个复数相加 { Complextemp; temp.Real=Real+c.Real; //实部相加 temp.Imag=Imag+c.Imag; //虚部相加 returntemp; } ComplexComplex::operator+(doubled)//重载运算符"+",一个复数加一个实数 { Complextemp; temp.Real=Real+d; temp.Imag=Imag; returntemp; } ComplexComplex::operator-(Complex&c)//重载运算符"-",两个复数相减 { //c1-c2 Complextemp; temp.Real=Real-c.Real; //实部相减 temp.Imag=Imag-c.Imag; //虚部相减 returntemp