#include <iostream>
using namespace std;
class Base
{
public:
Base():b(1){}
virtual void fun(){};
int b;
};
class Son:public Base
{
public:
Son():d(2){}
int d;
};
int main(int argc, char *argv[])
{
int n=97;
int *p=&n;
char *c=reinterpret_cast<char*> (p);//int指针转char指针
char *c2=(char*)(p);
cout<<"reinterpret_cast输出:"<<*c2<<endl;
const int *p2=&n;
int *p3=const_cast<int*>(p2);//把常量指针转成非常量指针
*p3=100;
const int &f=100;
cout<<"f is "<<f<<endl;
int &f2=const_cast<int&>(f);//把常量引用转换成非常量引用
f2=30;
cout<<"f2 is "<<f2<<endl;
cout<<"const_cast输出:"<<*p3<<endl;
Base* b1=new Son;
Base* b2=new Base;
Son *s1=static_cast<Son*>(b1);//同类型转换
Son *s2=static_cast<Son*>(b2);//下行转换,不安全
cout<<s1->d<<endl;
cout<<s2->d<<endl;//返回垃圾值
Son *s3=dynamic_cast<Son*>(b1); //同类型转换
Son *s4=dynamic_cast<Son*>(b2);//下行转换,安全 ,返回nullptr
cout<<s3->d<<endl;
if(s4==nullptr)
{
cout<<"s4指针为nullptr"<<endl;
}
else{
cout<<s4->d<<endl;
}
return 0;
}