const_cast 去const
static_cast 普通类型转换
dynamic_cast 父转子
reinterpret_cast 啥也转
#include<iostream>
using namespace std;
class Parent{
public:
virtual void vir_func(){
cout<<"Parent vir_func()"<<endl;
}
void func(){
cout<<"Parent func()"<<endl;
}
};
class Child1:public Parent{
public:
void vir_func(){
cout<<"Child1 vir_func()"<<endl;
}
void func(){
cout<<"child1 func()"<<endl;
}
};
int main()
{
int num1=111;
const int* c_p=&num1; //不能通过指针c_p修改num1
int* p=const_cast<int*>(c_p); //使用const_cast去掉const属性然后赋给指针p
*p=233; //成功修改 233
cout<<"num1被修改为了 "<<num1<<endl;
double c=static_cast<double>(num1) / 2; //int转double 相当于C语言中的强制类型转换的替代品
cout<<"int 转 double "<<c<<endl;
Parent* p_obj=new Child1();
p_obj->vir_func(); //虚函数动态调用 调用的是子类的
p_obj->func(); //调用的是父类的
dynamic_cast<Child1*>(p_obj)->func();//dynamic_cast主要用于“安全地向下转型”
//reinterpret_cast强制类型转换 尽量少用
return 0;
}