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;
}