//// Created by pengshuai on 2022年3月8日.///*** @brief 在面向对象程序设计中,有时我们需要在运行时查询一个对象是否能作为某种多态类型使用。* 与Java的instanceof,以及C#的as、is运算符类似,C++提供了dynamic_cast函数用于动态转型。* 相比C风格的强制类型转换和C++ reinterpret_cast,dynamic_cast提供了类型安全检查,* 是一种基于能力查询(Capability Query)的转换,所以在多态类型间进行转换更提倡采用dynamic_cast*/// CPP program to illustrate// // Run Time Type Identification#include<iostream>#include<typeinfo>using namespace std;class B { virtual void fun() {} };class D: public B { };int main(){B *b = new D; // 向上转型B &obj = *b;D *d = dynamic_cast<D*>(b); // 向下转型if(d != nullptr)cout << "works"<<endl;elsecout << "cannot cast B* to D*";try {D& dobj = dynamic_cast<D&>(obj);cout << "works" << endl;} catch (bad_cast bc) { // ERRORcout << bc.what() << endl;}return 0;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。