C++的运算符重载是这个语言的一个非常强大的表现力一个方面,运算符重载中有几个比较独特的行为,如:函数对象、类型转换等,这里简单的写几行代码(类型转换),把一头鹿变为一匹马
#include <iostream>
using namespace std;
class Horse {
public:
Horse() :
weight(0), speed(0), teeth(0) {
}
Horse(const int& w, const int& s, const int& t = 0) :
weight(w), speed(s), teeth(t) {
}
void neigh() const {
cout < < "吾本千里马也! " < < "体重: " < < weight < < ", 奔跑时速: " < < speed < < endl;
}
// 其它成员函数略 ...
private:
int weight;
int speed;
int teeth;
// 其它成员变量略 ...
};
class Deer {
public:
Deer() :
weight(0), speed(0) {
}
Deer(const int& w, const int& s) :
weight(w), speed(s) {
}
operator Horse() const {
return Horse(weight, speed);
}
operator int() const {
return weight + speed;
}
void speak() const {
cout < < "我是如假包换的鹿" < < endl;
}
// 其它成员函数略 ...
private:
int weight;
int speed;
// 其它成员变量略 ...
};
void listen(const Horse& h) {
h.neigh();
}
int main() {
Deer d(40, 68); // 这是一头鹿,40kg体重,时速68公里的奔跑速度
d.speak(); // 不信听他说的:我是如假包换的鹿
listen(d); // 可是在这里,鹿却变成了马,听他的嘶鸣:
// 吾本千里马也! 体重: 40, 奔跑时速: 68
// 更糟糕的是,一头鹿还可以变成int,不然他怎么会与int为伍?整个一部《哈利波特》
int n = 12 + d; // 12 + 40 + 68 = 120
cout < < n < < endl; // 120
}