在C++中,可以通过各种运算符对默认已有的数据类型进行各种运算,同时,C++还提供了运算符重载的方法。
通过运算符重载可以对我们自定义的类直接进行运算符的运算。
好比我们可以自定义一个Rectangle的类,这个类中存在长,宽,高三种属性。若是普通的运算符需要通过"."的方式或者"->"的方式一个个的进行输入或者输出。这个时候就可以使用运算符重载实现通过"<<"和">>"的方式直接进行输入和输出。
以加法运算为例,运算符重载的方法如下:
#include <iostream>
using namespace std;
class Rectangle {
public:
int length;
int width;
int height;
void setRect(int l, int w, int h) {
length = l;
width = w;
height = h;
}
void show() {
cout << length << " "
<< width << " "
<< height << endl;
}
};
//Rectangle为重载类型,operator为关键字表示运算符重载,"+"为重载的符号,可以填入其他符号,括号内为参数类型
Rectangle operator+(const Rectangle& a, const Rectangle& b) {
Rectangle sum;
sum.length = a.length + b.length;
sum.width = a.width + b.width;
sum.height = a.height + b.height;
return sum;
}
int main() {
Rectangle a, b, c;
Rectangle sum;
a.setRect(1, 1, 1);
b.setRect(2, 2, 2);
c.setRect(3, 3, 3);
sum = a + b + c;
sum.show();
return 0;
}
由上述的重载不难发现,重载的方法和函数非常相似。实际上,运算符重载在本质上就是函数的调用,也就是将函数名作为operator+的函数,无非就是使用的方法不太一样。运算符重载既可以通过调用函数实现也可以通过使用运算符实现,因此上述的main中的代码可以进行一定的修改
//源代码
sum = a + b + c;
//修改后
sum = operator+(operator+(a, b), c);
在上述的代码中,符号"+"实际上就是调用的operator+函数,因为这个函数具有两个参数,所以首先会计算a和b相加后的值,然后返回其值,将返回值再和c进行相加的操作。
同理,如果想要添加相减的代码则为:
Rectangle operator-(const Rectangle& a, const Rectangle& b) {
Rectangle sum;
sum.length = a.length - b.length;
sum.width = a.width - b.width;
sum.height = a.height - b.height;
return sum;
}
读者可以依据以上知识自己试着补充一下乘法和除法的运算符重载