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

亲,该文档总共67页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

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

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

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

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

第10章运算符重载第10章运算符重载例:一个日期类对象加上若干天数,应该仍是日期 Dated1(2001,12,1); ints=10; 应能得到:2001/12/11 即运算:d1=d1+s;是合理的 C++的语法问题:“+”运算的操作数是什么? “+”只定义了对内部数据类型intchar(字符)float(double)进行算术运算例:字符串相加操作 chara[10]=“Hello“; charb[10]=“World”; charc[20]=a+b;#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;//虚部 };能否也和整数的加法运算一样,直接用加号“+”来实现复数运算呢?#include<iostream> usingnamespacestd; classComplex//定义Complex类 { public: Complex(){real=0;imag=0;}//定义构造函数 Complex(doubler,doublei){real=r;imag=i;} //构造函数重载 Complexoperator+(Complex&c2); //声明复数相加函数 voiddisplay();//声明输出函数 private: doublereal;//实部 doubleimag;//虚部 };重载运算符的规则-1 C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。 不能重载的运算符只有5个 .(成员访问运算符) *(成员指针访问运算符) ∷(域运算符) sizeof(长度运算符) ?:(条件运算符) 重载不能改变运算符运算对象(即操作数)的个数。 重载不能改变运算符的优先级别。 重载不能改变运算符的结合性。 重载运算符的规则-2 重载运算符的函数不能有默认的参数,否则就改变了运算符参数的个数,与前面第(3)点矛盾。 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。 用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“&”不必用户重载。 应当使重载运算符的功能类似于该运算符作用于标准类型数据时所实现的功能。 运算符重载函数可以是类的成员函数,也可以是类的友元函数,还可以是既非类的成员函数也不是友元函数的普通函数。 用成员函数重载操作符 一般格式例3:#include<iostream.h> classCPoint{ intx,y; public: CPoint(intvx,intvy) {x=vx;y=vy;} CPoint(){x=0;y=0;} CPointoperator+(CPointp1); CPointoperator-(CPointp1); voidPrint(){cout<<x<<y<<“\n”;} }; CPointCPoint::operator+(CPointp1) { CPointp; p.x=x+p1.x; p.y=y+p1.y; returnp; }#include<iostream> usingnamespacestd; classComplex//定义Complex类 { public: Complex(){real=0;imag=0;}//定义构造函数 Complex(doubler,doublei){real=r;imag=i;} //构造函数重载 Complexoperator+(Complex&c2); //声明复数相加函数 voiddisplay();//声明输出函数 private: doublereal;//实部 doubleimag;//虚部 };用友元函数重载操作符 一般格式前例中: classCPoint { intx,y; public: //…… friendCPointoperator+(CPointp1,CPointp2); }; CPointoperator+(CPointp1,CPointp2) {CPointp; p.x=p1.x+p2.x;p.y=p1.y+p2.y; returnp; }#include<iostream> usingnamespacestd; classComplex//定义Complex类 {