C++运算符重载(6) - 转换操作符

来源:互联网 发布:金华职业技术学院网络 编辑:程序博客网 时间:2024/06/16 13:24
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;}

可以使用两种方式来打印复数的绝对值。

不过,一般来说,应该避免使用方法2。应该让编译器在基于类型来调用合适的函数上有更多控制权,而不是程序员自己期望调用哪个函数(这里的转换操作符函数中指定调用getMag函数)。更好的实践是采用特定的成员函数来实现这样的转换。只是有时为了适应C的一些库程序,不得已才这样使用。


关于更多转换操作符的信息,可以参考:
http://www.cnblogs.com/chinazhangjie/archive/2010/08/19/1803049.html

0 0
原创粉丝点击