1.运算符重载的需求
C++预定义的运算符,只能用于基本数据类型的运算:整型,实型,字符型,逻辑型。不能用于对象的运算,有时候又需要对象之间的运算。】
在数学上,两个符数可以直接进行±等运算。但是在c++中,直接将+或者-用于复数对象是不允许的。
有时候希望,让对象也能通过运算符进行计算。这样代码更加简介,更加易于理解。
例如;complex_a和complex_b是两个复数对象;
求两个复数的和,希望能直接写:
complex_a+complex_b
2:运算符重载:
运算符重载,就是对已有的运算符赋予多重的含义,使同一运算符作用域不同类型的数据时导致不同类型党的行为。
运算符重载的目的是:扩展c++中提供的运算符的适用范围,使之能作用于对象。
同一个运算符,对不同类型的操作数,所发生的行为不同。
例如:complex_a+complex_b 生成新的复数对象。
3.运算符重载的形式
运算符重载的实质就是函数重载。
可以重载为普通函数,也可以重载为成员函数。
把含运算符的表达式转换为运算符函数的调用。
把运算符的操作数转换成运算符函数的参数。
运算符被多次重载时,根据实参的类型决定调用哪个运算符函数。
形式:
返回值类型 operator 运算符(形参表)
{
···
}
例子:
class complex
{
public:
double real,imag;
complex(double r=0.0,double i=0.0):real(r),imag(i){}
complex operator -(const complex &c);
};
complex operator + (const complex &a,const complex &b)
{
return complex(a.real+b.real,a.imag+b.imag); //返回一个临时对象
}
complex complex::operator -(const complex &c)
{
return complex(real -c.real,imag-c.imag); //返回一个临时对象
}
//重载为成员函数时,参数个数为运算符目数减一
//重载为普通函数时,参数个数为运算符目数