在c++中,运算符的操作对象可以是基本的数据类型,也可以是类中重新定义的运算符,赋予运算符新的功能,对类对象进行相关操作
c++运算符重载的语法
返回值类型 operator运算符名称 (参数列表){
...
}
c++ 重载+,- 运算符
运算符重载可以用成员函数重载,也可以使用全局函数重载,下面进行介绍
class Coordinate {
public:
int x;
int y;
public:
Coordinate();
Coordinate(int x, int y);
Coordinate& operator+(Coordinate& cdt);
};
Coordinate& Coordinate::operator+(Coordinate& cdt) {
Coordinate cdt1;
cdt1.x = x + cdt.x;
cdt1.y = y + cdt.y;
return cdt1;
}
通过成员函数重载,我们只需传入一个对象作为形参,另外一个对象进行调用operator+()方法便可实现两个对象的成员变量值进行相加。其中
cdt3 = cdt1 + cdt2;
相当于
cdt3 = cdt1.operator+(cdt2);
其实没那么想的那么复杂,就是重新定义了operator+()方法,然后进行调用即可
再来看一下全局函数是怎么实现的
全局函数我们需要两个对象进行操作,故我们需要传入两个对象作为形参传入函数,然后对其进行操作
Coordinate& operator-(Coordinate& cdt1, Coordinate& cdt2) {
Coordinate cdt3;
cdt3.x = cdt1.x - cdt2.x;
cdt3.y = cdt1.y - cdt2.y;
return cdt3;
}
这里逻辑是一样的,重载乘除也是照葫芦画瓢
####################################################################
重载==,-运算符
class Coordinate {
public:
int x;
int y;
public:
Coordinate();
Coordinate(int x, int y);
bool operator==(Coordinate& cdt);
bool operator<(Coordinate& cdt);
};
bool Coordinate::operator==(Coordinate& cdt) {
return x == cdt.x;
}
bool Coordinate::operator<(Coordinate& cdt) {
return x < cdt.x;
}
int main() {
Coordinate cdt1(20, 20);
Coordinate cdt2(10, 10);
bool b = cdt2 == cdt1;
cout << "坐标x值是否相等:" << b << endl;
b = cdt2 < cdt1;
cout << "cdt2坐标x值是否大于cdt1坐标x值:" <<b<<endl;
}
这里写的比较简单,其实逻辑都差不多。