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; 
} 
原文地址:https://www.cnblogs.com/renhl/p/3852679.html