C++运算符重载之指鹿为马(类型转换)
帖子由 tiger » 2009-08-14 21:13
C++的运算符重载是这个语言的一个非常强大的表现力一个方面,运算符重载中有几个比较独特的行为,如:函数对象、类型转换等,这里简单的写几行代码(类型转换),把一头鹿变为一匹马
代码: 全选
/*
* type_conv.cpp
*
* Created on: 2009-8-14
* Author: kwarph
* Mail: kwarph@gmail.com
*/
#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
}
Linux C++高级软件工程师训练营
Q Q: 570508473
主 页:http://www.xuanyuan-soft.cn
论 坛:http://www.xuanyuan-soft.cn/forums
C++运算符重载之指鹿为马(类型转换)
-
- 帖子: 4
- 注册时间: 2009-11-09 10:39
-
- 帖子: 46
- 注册时间: 2009-08-07 20:55
- 来自: 中国-北京
- zhu527812567
- 帖子: 883
- 注册时间: 2009-11-17 12:29
- 联系:
Re: C++运算符重载之指鹿为马(类型转换)
代码: 全选
class Deer {
public:
operator Horse() const {
return Horse(weight, speed);
}
operator int() const {
return weight + speed;
}
其实是根据原来的鹿制造一个临时的马,这个临时的马当然可以listen...
+ d 的时候编译器 先通过这个转换制造一个临时的int。。再参与运算。。
所以根本不存在鹿变马这回事
-
- 帖子: 2841
- 注册时间: 2006-09-11 22:47
Re: C++运算符重载之指鹿为马(类型转换)
类型转换操作符在几乎所有正规的C++教材中都会建议你尽量避免使用。
多的我不说了。
多的我不说了。