#include <iostream> using namespace std; #include <typeinfo> class A{ public: virtual void foo(void){} }; class B:public A{ void foo(void){} }; class C:public A{ void foo(void ){} }; int main(void){ B b; A* pa= &b; B* pb = dynamic_cast<B*>(pa);//pa是指向B类型的基类指针,OK //C* pc = dynamic_cast<B*>(pa); //pa不是指向C类型的基类指针,error B b1; A& ra = b1; B& b2 = dynamic_cast<B&>(ra); //C& c1 = dynamic_cast<C&>(ra);error return 0; } 上面两个错误都是,编译时不报错,运行时报错. dynamic_cast主要是将指向子类的基类指针转化为子类的指针 转换过程中会检查目标和期望转换的对象是否一致,一致转换 成功,否则失败,如果转换为指针,则失败返回NULL,如果是引用失败 返回bad_cast异常
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。