C++四种强制转换类型
static_cast
reinterpret_cast
const_cast
dynamic_cast
static_cast
静态转换,用于非多态类型,任何标准的转换都可以用它,不能用于两个互不相干的类型
可以理解为能进行隐式转换类型的使用它
代码示例:
int i=1;
double d=static_cast<double>(i); //正确
int* p=&i;
p=static_cast<int> (i); //int和int*不相关
不相关类型之间的转换
代码示例:
int i=1;
int* p=&i;
p=reinterpret_cast<int>(i);
const_cast
去常性的强制类型转换,将const变为非const类型
代码示例:
const int a=2;
int* p=const_cast<int*>(&a);
*p=a;
dynamic_cast *****最重要的一个
动态转换,用于将一个父类对象的指针或引用)转化为子类对象的指针或引用
分类:
上转型:子类对象指针传给父类指针或引用
下转型:父类对象指针传给子类指针或引用
使用场景:
(1)只能用于含有虚函数的类
(2)先检查能否转化,能转化进行转化,不能转化返回0
(3)一般来说,父类不能转化成功,子类可以转化成功,从对象模型的角度我们可以看出,由于父类缺少子类特有的部分,所以指过去的时候会产生越界访问。
代码示例:
class B
{
virtual void fun()
{}
}
class D:public B
{}
B* pa=NULL;
D* pd=dynamic_cast<B*>(pa);