dynamic_cast主要用于有继承关系的多态类(基类必须有虚函数)的指针或引用之间的转换。
1.通过dynamic_cast,将派生类指针转换为基类指针(上行转换),这个操作与static_cast的效果是一样的。
2.通过dynamic_cast,将基类指针转换为派生类指针(下行转换),dynamic_cast具有类型检查的功能,比static_cast更安全(如果转换的是指针,失败时会返回空指针;如果转换的是引用,会抛出std::bad_cast异常)
#include <iostream>
using namespace std;
class B{
public:
int m_b;
virtual void f(){};
};
class D:public B{
public:
int m_d;
};
B* doUpCast(D* pd)
{
B* pb = dynamic_cast<B*>(pd);
cout<<"doUpCast convert pd:"<<pd<<" to pb="<<pb<<endl;
return pb;
}
D* doDownCast(B* pb)
{
D* pd = dynamic_cast<D*>(pb);
if(pd == nullptr)
{
cout<<"doDownCast convert pb="<<pb<<" to pd failed"<<endl;
}
else
{
cout<<"doDownCast convert pb="<<pb<&