上下行转换
子类上行转换成父类
父类下行转换成子类
静态转换(static_cast)
//1、基本类型转换(支持)
double d=3.15;
int num =static_cast<int>(d);
//2、基本指针类型(引用)转换 (不支持)
//int *p1 = static_cast<int *>(&d);
//3、上行转换(支持 安全)
Base *p2 = static_cast<Base *>(new Son);
//4、下行转换(支持 不安全)
Son *p3 = static_cast<Son *>(new Base);
//5、不相关类型转换(不支持)
//Base *p4 = static_cast<Base *>(new Other);
动态转换(dynamic_cast)
//1、基本类型转换(不支持)
double d=3.15;
//int num =dynamic_cast<int>(d);
//2、基本指针类型(引用)转换 (不支持)
//int *p1 = dynamic_cast<int *>(&d);
//3、上行转换(支持 安全)
Base *p2 = dynamic_cast<Base *>(new Son);
//4、下行转换(不支持 不安全)
//Son *p3 = dynamic_cast<Son *>(new Base);
//5、不相关类型转换(不支持)
//Base *p4 = dynamic_cast<Base *>(new Other);
常量转换(const_cast)
const和非const之间转换
//1、基本类型转换(不支持)
const int num = 10;
//int data = const_cast<int>(num);
//int &data2 = const_cast<int>(num);
int num2 = 10;
//const int data3 = const_cast<const int>(num2);
//const int &data4 = const_cast<const int>(num2);
//2、基本指针类型的转换(支持)
const int num3=10;
int *p1 = const_cast<int *>(&num3);
int num4 = 10;
const int *p2 = const_cast<const int *>(&num4);
//3、自定义类型转换 (支持)
const Other ob3;
Other &ob4 = const_cast<Other &>(ob3);
Other ob5;
const Other &ob6 = const_cast<const Other &>(ob5);
//4、自定义类型指针 (支持)
const Other ob1;
Other *p3 = const_cast<Other *>(&ob1);
Other ob2;
const Other *p4 = const_cast<const Other *>(&ob2);
重新解释转换(reinterpret_cast)
类型C语言的强制类型转换。
//1、基本类型转换(不支持)
double d=3.15;
//int num =reinterpret_cast<int>(d);
//2、基本指针类型(引用)转换 (支持)
int *p1 = reinterpret_cast<int *>(&d);
//3、上行转换(支持 安全)
Base *p2 = reinterpret_cast<Base *>(new Son);
//4、下行转换(支持 不安全)
Son *p3 = reinterpret_cast<Son *>(new Base);
//5、不相关类型转换(支持)
Base *p4 = reinterpret_cast<Base *>(new Other);
网友评论