C++ 类的自动转换与强制类型转换

来源:互联网 发布:万科荣华金域名城1号楼 编辑:程序博客网 时间:2024/05/29 15:42

一,从内置数据类型到用户自定义类型的转换

1,下面是自定义的Time类

class Time{private:    int intVal;    double doubleVal;public:    Time(int val):intVal(val){}    Time(double val):doubleVal(val){}};int main(){    int val = 10;    Time obj(5);    obj = val;    return 0;}

程序分析:

在C++中,接收一个参数的构造函数为将该参数类型的值转换为自定义的类型提供了蓝图。因此,在上面的构造函数中,可以将int、double类型转换为Time类型。


2,可以将构造函数用作自动类型转换,但是这样做也会导致意外的类型转换。因此,C++提供了explicit关键字用于关闭这种特性。使用explicit关键字关闭了上面的自动类型转换,但仍然允许强制类型转换。

class Time{private:    int intVal;    double doubleVal;public:    explicit Time(int val):intVal(val){}    explicit Time(double val):doubleVal(val){}};int main(){    int val = 10;    Time obj(5);    obj = val;        //不合法    obj = (Time)val;  //合法,进行强制类型转换    return 0;}


二,从用户自定义类型到内置类型之间的转换

上面介绍的是从int、double到Time类型的转换,这节要讲的是从Time类型到int、double等内置数据类型的转换。要进行相反的转换,必须使用特殊的C++运算符函数--转换函数,转换函数是用户定义的强制类型转换。

1,转换函数的原型

operator typeName();

2,使用转换函数应注意下面几点

a,转换函数必须是类方法。

b,转换函数不能指定返回类型。

c,转换函数不能有参数。


3,使用类型转换函数

class Time{private:    int intVal;    double doubleVal;public:    Time(int val):intVal(val){}    Time(double val):doubleVal(val){}    operator int() const{        return intVal;    }    operator double() const{        return doubleVal;    }};int main(){    int val = 10;    Time obj(5);    val = obj;    return 0;}