C++类型转换函数:将当前类的类型转换为其它类型

转换构造函数能够将其它类型转换为当前类类型(例如将 double 类型转换为 Complex 类型),但是不能反过来将当前类类型转换为其它类型(例如将 Complex 类型转换为 double 类型)。

C++ 提供了类型转换函数(Type conversion function)来解决这个问题。类型转换函数的作用就是将当前类类型转换为其它类型,它只能以成员函数的形式出现,也就是只能出现在类中。

类型转换函数的语法格式为:

operator type(){
    //TODO:
    return data;
}

operator 是 C++ 关键字,type 是要转换的目标类型,data 是要返回的 type 类型的数据。

因为要转换的目标类型是 type,所以返回值 data 也必须是 type 类型。既然已经知道了要返回 type 类型的数据,所以没有必要再像普通函数一样明确地给出返回值类型。这样做导致的结果是:类型转换函数看起来没有返回值类型,其实是隐式地指明了返回值类型。

类型转换函数也没有参数,因为要将当前类的对象转换为其它类型,所以参数不言而喻。实际上编译器会把当前对象的地址赋值给 this 指针,这样在函数体内就可以操作当前对象了。关于 this 的原理请猛击《C++ this指针详解》。

【示例】为 Complex 类添加类型转换函数,使得 Complex 类型能够转换为 double 类型。

 
  
  1. ​
    #include 
    using namespace std;
    //复数类
    class Complex{
    public:
    Complex(): m_real(0.0), m_imag(0.0){ }
    Complex(double real, double imag): m_real(real), m_imag(imag){ }
    public:
    friend ostream & operator<<(ostream &out, Complex &c);
    friend Complex operator+(const Complex &c1, const Complex &c2);
    operator double() const { return m_real; } //类型转换函数
    private:
    double m_real; //实部
    double m_imag; //虚部
    };
    //重载>>运算符
    ostream & operator<<(ostream &out, Complex &c){
    out << c.m_real <<" + "<< c.m_imag <<"i";;
    return out;
    }
    //重载+运算符
    Complex operator+(const Complex &c1, const Complex &c2){
    Complex c;
    c.m_real = c1.m_real + c2.m_real;
    c.m_imag = c1.m_imag + c2.m_imag;
    return c;
    }
    int main(){
    Complex c1(24.6, 100);
    double f = c1; //相当于 double f = Complex::operator double(&c1);
    cout<<"f = "<

你可能感兴趣的:(c++,算法,数据结构)