C++ 为程序员提供了灵活的手段,让程序员自己定义类,自己设计相应的运算符(必须在已有的运算符基础上设计),使之应用于自己定义的类。
与函数重载类似,对已有的运算符赋予新的含义,用一个运算符表示不同功能的运算,这就是运算符重载。
实际上,我们在此之前已经使用了运算符重载。如<<是C++的移位运算符,它又与流对象cout配合作为流插入运算符,这是C++对<<进行了重载处理。
1、运算符重载的实质
运算符重载是对已有的运算符赋予多重含义。
2、运算符重载的必要性
C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)
3、运算符重载的实现机制
将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。
编译系统对重载运算符的选择,遵循函数重载的选择原则。
例4.1 通过成员函数实现复数的加法。
class Complex
{ private:
double real;
double imag;
public:
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex complex_add(Complex &c2);
void display();
} ;
Complex Complex::complex_add(Complex &c2)
{ Complex c;
c.real=real +c2.real; c.imag=imag+c2.image;
return c; }
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}
int main()
{Complex c1(3,4),c2(5,-10),c3;
c3=c1.complex_add(c2);
cout<<"c1="; c1.display();
cout<<"c2="; c2.display();
cout<<"c1+c2="; c3.display();
return 0;
}
说明:
1、在Complex类中定义了complex_add函数做加法,函数的参数是引用对象,作为一个加数。在函数里定义了临时对象c,两个赋值语句相当于:
c.real = this->real +c2.real;
c.imag = this->imag+c2.image;
2、在main函数中通过对象c1调用加法函数,上面的语句相当于:
c.real = c1.real +c2.real;
c.imag = c1.imag+c2.image;
思考:能否用“+” 运算符实现复数加法?

