运算符重载赋予了自定义的类可以进行运算符操作的能力,比如自己定义了一个Positon 的坐标类,希望可以通过加减来得到新的坐标,就可以通过运算符重载来实现
其实就是实现一个 operator+函数,这个函数以operator开头,接上一个运算符,运算符重载可以提高代码的可读性,如果不使用也可通过其他函数实现,完全可以达到相同的效果。
#include <iostream>
using namespace std;
class Position{
public:
int x;
int y;
Position(int x ,int y)
{
this->x = x;
this->y = y;
}
// + 运算符重载 重载后可以进行两个对象的 + 运算
Position operator+(const Position pos){
Position newPos(this->x + pos.x, this->y + pos.y);
return newPos;
}
// - 运算符重载 重载后可以进行两个对象的 + 运算
Position operator-(const Position pos){
Position newPos(this->x - pos.x, this->y - pos.y);
return newPos;
}
//不用运算符重载的加法运算
Position add(const Position pos)
{
Position newPos(this->x + pos.x, this->y + pos.y);
return newPos;
}
//不用运算符重载的减法运算
Position minus(const Position pos)
{
Position newPos(this->x - pos.x, this->y - pos.y);
return newPos;
}
void print ()
{
cout<< "x = " << this->x << endl;
cout<< "y = " << this->y << endl;
}
};
int main(int argc, const char * argv[]) {
// insert code here...
std::cout << "Hello, World!\n";
Position pos1(1,2);
Position pos2(3,4);
Position pos3 = pos1.add(pos2);
Position pos4 = pos1+pos2;
Position pos5 = pos2.minus(pos1);
Position pos6 = pos2-pos1;
cout<< "pos1 ==>"<<endl;
pos1.print();
cout<< "pos2 ==>"<<endl;
pos2.print();
cout<< "非运算符重载:pos1.add(pos2) ==>"<<endl;
pos3.print();
cout<< "运算符重载:pos1 + pos2 ==>"<<endl;
pos4.print();
cout<< "非运算符重载:pos1.minus(pos2) ==>"<<endl;
pos5.print();
cout<< "运算符重载:pos1 - pos2 ==>"<<endl;
pos6.print();
return 0;
}
运行:
Hello, World!
pos1 ==>
x = 1
y = 2
pos2 ==>
x = 3
y = 4
非运算符重载:pos1.add(pos2) ==>
x = 4
y = 6
运算符重载:pos1 + pos2 ==>
x = 4
y = 6
非运算符重载:pos1.minus(pos2) ==>
x = 2
y = 2
运算符重载:pos1 - pos2 ==>
x = 2
y = 2
Program ended with exit code: 0
运行可以看出,用运算符重载pos1+pos2得到的结果和不用运算符重载的pos1.add (pos2)的结果一致。