C++语法小记---类型转换

类型转换
  • 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

      • 用型如int toNumber()的成员函数代替类型转换函数

 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 }