两种场合:
1. 父类指针转换为子类指针
转换失败返回空;成功返回子类指针
2. 父类引用转换为子类
失败抛出bad_cast异常; 成功返回子类的引用
#include <iostream>
using namespace std;
class CBasic
{
public:
virtual int test(){return 0;} // 一定要是 virtual
};
class CDerived : public CBasic
{
public:
virtual int test(){ return 1;}
};
int main()
{
CBasic cBasic;
CDerived cDerived;
CBasic * pB1 = new CBasic;
CBasic * pB2 = new CDerived;
//dynamic cast failed, so pD1 is null.
CDerived * pD1 = dynamic_cast<CDerived * > (pB1);
//dynamic cast succeeded, so pD2 points to CDerived object
CDerived * pD2 = dynamic_cast<CDerived * > (pB2);
//dynamci cast failed, so throw an exception.
//
try
{
CDerived & rD1 = dynamic_cast<CDerived &> (*pB1);
}
catch(std::bad_cast & e)
{
std::cout<<e.what()<<'/n';
}
//dynamic cast succeeded, so rD2 references to CDerived object.
CDerived & rD2 = dynamic_cast<CDerived &> (*pB2);
return 0;
}