运行时类型检查转换dynamic_cast
用途及条件
1、基类要有虚函数
2、主要用于“安全地向下转型”
解释
1、为什么基类要有虚函数?
答:dynamic_cast在运行时会进行类型检查,这种检查不是语法上的检查,而是真实情况地检查。如何检查?如果代码中使用了强制类型转换dynamic_cast,编译器会在运行时生成一段代码来查询对象的虚函数表,利用虚函数表和虚函数表指针判断原对象是否可以安全地转换成目标对象。所以基类中要有虚函数,不然调用dynamic_cast会报错。
这段代码,基类没有虚函数,调用dynamic_cast报错 “ 操作数必须包含多态类型 ”
2、什么是安全地向下转型
说白了,就是将 指向派生类的基类指针或基类引用 安全地 转换成派生类指针或派生类引用 ;或者将空基类指针安全地转换成 派生类指针;引用必须初始化,所以没有将空引用转换的说法;
3、向上转型
“先上转型”(即派生类指针或引用类型转换为其基类类型),本身就是安全的,尽管可以使用dynamic_cast进行转换,但这是没必要的, 普通的转换已经可以达到目的
static_cast
用途:
1、用于内置类型的转换(这种转换用c风格的强制转换也是一样的)
2、指针之间的转换
reinterpret_cast
reinterpret_cast<目标类型>(原类型);
<目标类型>和(原类型)中必须有一个是指针或引用类型。
用途:
1、改变指针或引用的类型
2、将指针或引用转换成整型
3、将整型转换成指针或引用
const_cast
前面四种类型转换不能去掉变量的const和volatile特性
这里的变量是指指针或引用(其实引用就是指针,理解指针的就行了)
为什么说这里的变量是指指针,而不能是内置变量? 因为对于内置变量来说,就只是简单的赋值,和const无关
去掉指针的const
标签:类型转换,派生类,dynamic,C++,cast,引用,基类,四种,指针 From: https://blog.csdn.net/m0_63049243/article/details/137028710