1.) 运算符重载的需求
- C++预定义的运算符,只能用于基本数据类型的运算:整型、实型、字符型、逻辑型。但是,不能对复数对象进行运算。所以此时引出运算符重载。
- 有时候会希望,让对象也能通过运算符进行运算。这样代码更简洁,容易理解。 例如:complex_a和complex_b是两个复数对象;求两个复数的和,希望能直接写: complex_a+complex_b.
2.) 运算符重载
- 运算符重载,就是对已有的运算符(C++中预定义的运算符)赋予多重的含义,使同一运算符作用于不同类型的数据时导致不同类型的行为。
- 运算符重载的目的是:扩展C++中提供的运算符的适用范围,使其能作用于对象。
- 同一个运算符,对于不同类型的操作数,所发生的行为不同。 例如:complex_a + complex_b 生成新的复数对象
3.) 运算符重载的形式
- 运算符重载的实质是函数重载。
- 可以重载为普通函数,也可以重载为成员函数。
- 把含运算符的表达式转化成对运算符函数的调用。
- 把 运算符的操作数转化成运算符函数的参数。
- 运算符被多次重载时,根据实参的类型决定调用哪个运算符函数。
4.) 运算符重载的形式
返回值类型 operator运算符(形参表) (函数名:operator运算符)
{
......
}
5.) 运算符重载示例
重载为成员函数时,参数个数为运算符目数减一。
重载为普通函数时,参数个数为运算符目数。
代码如下:
//运算符重载示例
#include<iostream>
using namespace std;
class Complex
{
public:
double real,imag;
Complex(double i=0.0,double j=0.0):real(i),imag(j){ }
Complex operator- (const Complex& c);
};
Complex Complex::operator- (const Complex& c)//重载为成员函数时,参数个数为运算符目数减一
{
return Complex(real-c.real,imag-c.imag);//返回一个临时对象
}
Complex operator+ (const Complex& a,const Complex& b)//重载为普通函数时,参数个数为运算符目数
{
return Complex(a.real+b.real,a.imag+b.imag);//返回一个临时对象
}
int main(void)
{
Complex a(1,7),b(2,3),c;
c=a+b;//等价于c=operator+(a,b);
cout<<c.real<<","<<c.imag<<endl;
c=a-b;
cout<<c.real<<","<<c.imag<<endl;
return 0;
}
结果:
3,10
-1,4
c=a+b;等价于c=operator+(a,b);
a-b 等价于a.operator-(b).
扫描二维码关注公众号,回复:
9033485 查看本文章