强制类型转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数。
重载强制类型转换运算符时,不需要指定返回值类型,因为返回值类型是确定的,就是运算符本身代表的类型。
#include <iostream>
using namespace std;
class MyComplex
{
double real;
double imag;
public:
MyComplex(double r = 0, double i = 0) : real(r), imag(i) {}
// 强制类型转换运算符double()
operator double() {
return real;
}
};
int main()
{
MyComplex c(1.2, 3.4);
cout << double(c) << endl;
double n = 12 + c;
cout << n << endl;
return 0;
}
结果:
1.2
13.2
分析:
重载后 (double)c等价于 c.operator double()。语句 double n = 12 + c编译器认为,如果double类型的值出现在这个位置,则语法上是正确的,如double c = 5,则结果是17。但是现在出现的是类MyComplex的对象,而类MyComplex重载了double运算符,因而编译器认为这条语句等价于 double n = 12 + c.operator double()。其结果为13.2.
来自《c++程序设计》