#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异常
转载于:https://blog.51cto.com/12218412/1868772