dynamic

    技术2022-05-20  39

    在vc6.0下默认不支持使用动态运行时(RTTI),所以在编译程序前应对工程进行设置:

    方法如下:

         工程→设置→C++→(勾选)允许运行时信息RTTI

     

    dynamic_cast 如果转换失败,将返回一个NULL指针

    实例:

    #include <iostream> using namespace std; class Base {}; class Derived :public Base { }; int main(int argc, char* argv[]) { Derived *pd = new Derived; Base *pb = dynamic_cast<Base*>(pd); if(!pb) cout<<"dynamic_cast 动态类型转换失败 /n"<<endl; else cout<<"dynamic_cast 转换成功"<<endl;//print this line Derived d; Base& b = dynamic_cast<Base &> (d); if(!&b) cout<<"dynamic_cast 动态类型转换失败 /n"<<endl; else cout<<"dynamic_cast 转换成功"<<endl;//print this line /* A 中有虚函数,可以进行不同类之间的类型转换*/ class A{ virtual ~A(){}}; class B{}; A* paa=new A; try{ B* pbb=dynamic_cast<B*>(paa); if(!pbb) cout<<"dynamic_cast 动态类型转换失败 /n"<<endl;//print this line?? 书上说是下一句,可实际情况不是(vc6.0下编译运行) else cout<<"dynamic_cast 转换成功"<<endl; } catch(...) { cout<<"exception error!"<<endl; } return 0; }  

    其中  如果不对工程设置,下面这一句将抛出异常

             B* pbb=dynamic_cast<B*>(paa);

      不过设置后,动态转换也不成功,查些资料后发现确实不可以。

    倒可以用

        B* pbb=reinterpret_cast<B*>(paa);

    进行转换,转换后 打印转换成功。

    参考:

    http://apps.hi.baidu.com/share/detail/33086464


    最新回复(0)