类型转换
-
C++类型转换主要包含两种:
-
隐式类型转换
-
小类型向大类型转换
-
char -> int
-
short ->int
-
int -> unsigned int
-
int -> float
-
float ->double
-
-
-
显示类型转换
-
const_cast:移除变量的const属性
-
static_cast:完成基础数据类型,同一个继承体系中类型的转换,任意类型与空指针类型void*之间的转换
-
dynamic_cast:使用多态的场景,有继承,有虚函数,向下转型时使用
-
reinterpret_cast:改变指针或引用的类型,不知道用哪一个类型转换就用它
-
-
-
普通类型和类类型之间的转换,类类型之间的转换
-
转换构造函数:将其他类型转换为类类型
-
一种特殊的构造函数
-
只有一个参数
-
使用explicit就可以限制构造函数的隐式类型转换
-
-
类型转换函数:将类类型转换为其它类型
-
将成员函数作为类型转换函数,如:int toNumber()
-
当同时定义转换构造函数和类型转换函数时,编译器会报错,处理方法:
-
一个类定义转换构造函数,一个类定义类类型转换函数,提供两种方式转换,此时编译器报错
-
声明构造函数为explicit
-
-
-
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class Test 7 { 8 int mi; 9 public: 10 Test(int i = 0) //转换构造函数 11 { 12 mi = i; 13 } 14 15 int toInt() //成员函数作为类型转换函数 16 { 17 return mi; 18 } 19 20 operator int() //类型转换函数 21 { 22 return mi; 23 } 24 }; 25 26 int main() 27 { 28 Test t; 29 30 t = 1; //编译器会隐式调用转换构造函数 31 32 int x = t; //编译器会隐式调用类型转换函数 33 34 int y = t.toInt(); //显式调用成员函数 35 36 return 0; 37 }