c++四种cast


#include 
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 "<endl; 
    int &f2=const_cast<int&>(f);//把常量引用转换成非常量引用 
    f2=30;
    cout<<"f2 is "<endl;
    cout<<"const_cast输出:"<<*p3<<endl; 
    
    Base* b1=new Son;
    Base* b2=new Base;
    Son *s1=static_cast(b1);//同类型转换
    Son *s2=static_cast(b2);//下行转换,不安全
    cout<d<<endl;
    cout<d<//返回垃圾值 
    
    Son *s3=dynamic_cast(b1); //同类型转换
    Son *s4=dynamic_cast(b2);//下行转换,安全 ,返回nullptr 
    cout<d<<endl;
    if(s4==nullptr)
    {
        cout<<"s4指针为nullptr"<<endl;
    } 
    else{
        cout<d<<endl;
    }
    return 0;
}