5.3.2成员运算符函数 运算符函数可以定义为类的成员(称为成员运算符函数) 成员运算符函数定义的语法形式 成员运算符函数在类中的声明格式为: class xi type operator@(参数表); 其中type为函数的返回类型,@为所要重载的运算符符号,X是重 载此运算符的类名,参数表中罗列的是该运算符所需要的操作数。 成员运算符函数定义的更一般形式为 type x: operator@(参数表) ∥数体 在成员运算符函数的参数表中,若运算符是单目的,则参数表为空; 若运算符是双目的,则参数表中有一个操作数
11 5.3.2 成员运算符函数 运算符函数可以定义为类的成员(称为成员运算符函数) 1. 成员运算符函数定义的语法形式 成员运算符函数在类中的声明格式为: class X{ //... type operator@(参数表); //... }; 其中type为函数的返回类型,@为所要重载的运算符符号 ,X是重 载此运算符的类名,参数表中罗列的是该运算符所需要的操作数。 成员运算符函数定义的更一般形式为: type X::operator @(参数表) { //函数体 } 在成员运算符函数的参数表中,若运算符是单目的,则参数表为空; 若运算符是双目的,则参数表中有一个操作数
2.双目运算符重载 对双目运算符而言,成员运算符函数的参数表中仅有一个参数,它 们为运算符的右操作数,此时当前对象作为运算符的左操作数, 它们通过this指针隐含地传递给函数的。例如 class xi ∥l。 int operator +(x a) 在类X中声明了重载“+”的成员运算符函数,返回类型为int,它具 有两个操作数,一个是当前对象,另一个是对象a 例5.3用双目运算符函数进行复数运算的例子 两个复数a+bcd进行加、减、乘、除的方法如下: 加法:(a+b)+cdi)=(a+c)+(b+d)i 减法:(a+bi)-c+d)=(a)+(b-d)i 乘法:(a+bi)*ctdi)=(ac-bd)+(adbc)i 除法:(a+b)/(c+di)=(a+bi)*(cd)/(c’c+d*d) 12
12 2.双目运算符重载 对双目运算符而言,成员运算符函数的参数表中仅有一个参数,它 们为运算符的右操作数,此时当前对象作为运算符的左操作数, 它们通过this指针隐含地传递给函数的。 例如: class X{ //... int operator +(X a); }; 在类X中声明了重载“+”的成员运算符函数,返回类型为int,它具 有两个操作数,一个是当前对象,另一个是对象a。 例 5.3 用双目运算符函数进行复数运算的例子 两个复数a+bi和c+di进行加、减、乘、除的方法如下: 加法:(a+bi)+(c+di)=(a+c)+(b+d)i 减法:(a+bi)-(c+di)=(a-c)+(b-d)i 乘法:(a+bi)*(c+di)=(ac-bd)+(ad+bc)i 除法:(a+bi)/(c+di)=((a+bi)*(c-di))/(c*c+d*d)
个复数类 complex,类中含有两个数据成员,即复数的实数部分 include <iostream.h> class complext private: double rea;∥复数的实数部分 double imag;∥复数的虚数部分 public complex( double r=00 double i=0.0);∥构造函数 void printo;∥显示输出复数 complex operator +(complex c); ∥重载复数“+”运算 符 complex operator -(complex c) ∥重载复数“-”运算 符 complex operator *(complex c) ∥重载复数“*”运 算符 complex operator/( complex c);∥重载复数“/”运算 符 13 }
13 一个复数类complex,类中含有两个数据成员,即复数的实数部分 #include <iostream.h> class complex{ private: double real; //复数的实数部分 double imag; //复数的虚数部分 public: complex(double r=0.0,double i=0.0); //构造函数 void print(); //显示输出复数 complex operator +(complex c); //重载复数“+”运算 符 complex operator -(complex c); //重载复数“-”运算 符 complex operator *(complex c); //重载复数“*”运 算符 complex operator /(complex c); //重载复数“/”运算 符 }; complex::complex(double r,double i) //定义构造函数
接1例5.3 complex complex. operator +(complex c) ∥/重载“+”定义 complex temp temp. realreal+C real; temp. imag=imag+C imag; return temp; complex complex:: operator-(complex c) ∥重载“”定义 complex temp; temp. realreal-C real; temp. imag=imag-C imag return temp;
14 接1 例5.3 complex complex::operator +(complex c) //重载“+”定义 { complex temp; temp.real=real+c.real; temp.imag=imag+c.imag; return temp; } complex complex::operator -(complex c) //重载“-”定义 { complex temp; temp.real=real-c.real; temp.imag=imag-c.imag; return temp; }
接2例53 complex complex: operator*(complex c) ∥重载“*足 义 complex temp temp. realrealC real-imag *c imag temp. imag=imag *c real+real*C imag; return temp; complex complex: operator /complex c) ∥重载“/”定义 complex temp double t. t=1/c real C real+C imag*c imag) temp. real(real"c real+imag*C imag*t temp. imag=(c real*imag-real"C imag)*t return temp 15
15 接2 例5.3 complex complex::operator *(complex c) //重载“*”定 义 { complex temp; temp.real=real*c.real-imag*c.imag; temp.imag=imag*c.real+real*c.imag; return temp; } complex complex::operator /(complex c) //重载“/”定义 { complex temp; double t; t=1/(c.real*c.real+c.imag*c.imag); temp.real=(real*c.real+imag*c.imag)*t; temp.imag=(c.real*imag-real*c.imag)*t; return temp; }