C++利用类做为具体类型来抽象现实世界。有时需要隐式地将一个具体类型转换为另一个具体类型,或转换为原始类型。此时就需要用到转换操作符。
参考下面例子:
#include <iostream>
#include <cmath>
using namespace std;
class Complex {
private:
double real;
double imag;
public:
// 默认构造函数
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
// 求复数的绝对值
double mag() { return getMag(); }
// 转换操作符
operator double() { return getMag(); }
private:
// get magnitude
double getMag() { return sqrt(real * real + imag * imag); }
};
int main() {
// 定义一个复数对象
Complex com(3.0, 4.0);
// 打印magnitude,可以使用下面的两种方法
//方法1
cout << com.mag() << endl;
//方法2
cout << com << endl;
}
运行结果:
5
5
可以使用两种方式来打印复数的绝对值。
不过,一般来说,应该避免使用方法2。应该让编译器在基于类型来调用合适的函数上有更多控制权,而不是程序员自己期望调用哪个函数(这里的转换操作符函数中指定调用getMag函数)。
更好的实践是采用特定的成员函数来实现这样的转换。只是有时为了适应C的一些库程序,不得已才这样使用。