,,C++ 中dynamic_cast<>的使用方法小结

,,C++ 中dynamic_cast<>的使用方法小结 将基类指针(或引用)强制转换为继承类指针,dynamic_cast会根据基类指针是否真的指向继承类指针来处理。 我会做出一定的判断。对指针进行dynamic_cast,失败返回null,正常强制转换后成功返回对象指针;对引用执行Dynamic_cast,失败时抛出异常,正常强制转换后的对象引用成功返回。 注意:dynamic_cast将父类强制转换为子类时,父类必须有虚函数。例如,当CBasic类中的测试函数在下面的代码中没有定义为虚函数时,编译器会报错:Error C 2683:dynamic _ cast:“C Basic”不是多态类型。 对编译器的要求:dynamic_cast会使用RTTI技术,所以需要启用“运行时类型信息”这个选项,在VC.net 2003中默认是关闭的。所以这个选项需要人工激活。否则,编译器将报告以下警告: 警告c4541: "dynamic _ cast "与/GR-一起用于多态类型" c basic ";它可能导致不可预测的行为,导致程序在运行时出现异常。这个设置是用C/C-C语言在项目设置中设置的。*/复制如下代码:#使用命名空间STD包含IOStream class c basic { public:virtual int test(){ return 0;}//必须是虚拟的}; class CDerived:public CBasic { public:virtual int test(){ return 1;} }; int main(){ CBasic CBasic;CDerived cDerived CBasic * pB1=新CBA sic;CBasic * pB2=new CDerived //动态强制转换失败,因此pD1为空。CDerived * pD1=dynamic _ cast CDerived *(pB1); //动态强制转换成功,所以pD2指向CDerived对象CDerived * pD2=dynamic _ castCDerived *(pB2); //dynamci强制转换失败,因此引发异常。//CDerived rD1=dynamic _ castCDerived(* pB1); //动态强制转换成功,因此rD2引用CDerived对象。CDerived rD2=dynamic _ cast CDerived(* pB2); 返回0;}

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: