在需要做数据类型转换时,一般显式的写法是:
- <span style="font-size:18px;">type1 i;
- type2 d;
- i = (type1)d; //显式的写类型转,把d从type2类型转为type1类型</span>
这种写法不能做到无缝转换,也就是直接写 i = d,而不需要显式的写(type1)来向编译器表明类型转换,要做到这点就需要介绍一下“类型转换操作符”,拿最简单的基本类型封包解包来举例:
- class Integer
- {
- public:
- Integer(int v);
- Integer& opetaror =(const int &v); //重载赋值操作符,可以做到 Integer i = 10;//把i当基本数据类型使用
- operator int(); //重载类型转换操作符,可以做到int i; Integer it; i = it; //it直接转为int类型,然后赋值给i
- private:
- int data;
- };
- Integer::Integer(int v)
- {
- data = v;
- }
- /*!
- *@brief 重载赋值操作符,可以做到 Integer i = 10;//把i当基本数据类型使用
- */
- Integer& Integer::opetaror =(const int &v)
- {
- data = v;
- return *this;
- }
- /*!
- *@brief 重载类型转换操作符,可以做到int i; Integer it; i = it; //it直接转为int类型,然后赋值给i
- */
- Integer::operator int()
- {
- return data;
- }
- #include <iostream>
- using namespace std;
- int main()
- {
- Integer integer1(10); //调用构造函数进行初始化
- Integer integer2;
- int i1 = 10;
- integer2 = i1; //调用=赋值操作符进行赋值
- //下面测试类型转换操作符的应用
- int i2;
- i2 = integer1; //integer1是Integer类型,这里直接把Integer类型转换为int,然后赋值给i2
- //如果没有重载了int(),需要类型转换的话,这里必须写成 i2 = (int)integer1;
- return 0;
- }
这是int类型转换的写法,相应的,long,float,double等等的类型转换方法一样,统一的说,可以抽象的写成
operator type();只要type是一个类型,包括基本数据类型,自己写的类或者结构体都可以转换。