dynamic_cast使用
两种场合:
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; }