在了解了基本的四则运算和输入输出之后我们再来了解一下其他的重载。
在C++中,常用的运算符除了四则运算输入和输出外还存在着逻辑运算符和赋值运算符。
相同的道理,还是将运算符重载作为函数调用来看,先确定函数类型,再确定参数。
逻辑运算符重载只需要返回bool类型即可,具体如下:
#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;
}
};
bool operator<(const Rectangle& rec1, const Rectangle& rec2) {
if (rec1.height < rec2.height && rec1.length < rec2.length && rec1.width < rec2.width) {
return true;
}
return false;
}
bool operator>(const Rectangle& rec1, const Rectangle& rec2) {
if (rec1.height > rec2.height && rec1.length > rec2.length && rec1.width > rec2.width) {
return true;
}
return false;
}
bool operator==(const Rectangle& rec1, const Rectangle& rec2) {
if (rec1.height == rec2.height && rec1.length == rec2.length && rec1.width == rec2.width) {
return true;
}
return false;
}
int main() {
Rectangle num1, num2;
num1.setRect(1, 1, 1);
num2.setRect(2, 2, 2);
cout << (num1 > num2) << endl;
cout << (num1 < num2) << endl;
cout << (num1 == num2) << endl;
return 0;
}
赋值运算符需要在类中进行重载,赋值时仅仅是对数据做处理,可以将返回值设置为空,具体代码如下:
#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;
}
void operator=(const Rectangle& rect) {
length = rect.length;
width = rect.width;
height = rect.height;
}
};
int main() {
Rectangle num1;
num1.setRect(1, 1, 1);
Rectangle num;
num = num1;
num.show();
return 0;
}
所有类型的运算符重载的方法都是推测其返回值和参数。运算符重载既可以在类中实现,也可以在类外实现,读者若感兴趣可以自行尝试在类中和类外分别实现运算符重载(提示:不是所有的运算符重载都既可以在类中实现也可以在类外实现)