bad_cast (Excepción)

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

El operador dynamic_cast inicia la excepción bad_cast como resultado de una conversión incorrecta a un tipo de referencia.

catch (bad_cast)  
   statement  

La interfaz de bad_cast es:

class bad_cast : public exception {  
public:  
   bad_cast(const char * _Message = "bad cast");  
   bad_cast(const bad_cast &);  
   virtual ~bad_cast();  
};  

El código siguiente contiene un ejemplo de dynamic_cast con errores que inicia la excepción bad_cast.

// expre_bad_cast_Exception.cpp  
// compile with: /EHsc /GR  
#include <typeinfo.h>  
#include <iostream>  
  
class Shape {  
public:  
   virtual void virtualfunc() const {}  
};  
  
class Circle: public Shape {  
public:  
   virtual void virtualfunc() const {}  
};  
  
using namespace std;  
int main() {  
   Shape shape_instance;  
   Shape& ref_shape = shape_instance;  
   try {  
      Circle& ref_circle = dynamic_cast<Circle&>(ref_shape);   
   }  
   catch (bad_cast b) {  
      cout << "Caught: " << b.what();  
   }  
}  

Se inicia una excepción porque el objeto que se convierte (una forma) no se deriva del tipo de conversión especificado (Circle). Para evitar la excepción, agregue estas declaraciones a main:

Circle circle_instance;  
Circle& ref_circle = circle_instance;  

A continuación, invierta el sentido de la conversión en el bloque try, como sigue:

Shape& ref_shape = dynamic_cast<Shape&>(ref_circle);  

dynamic_cast (Operador)
Palabras clave de C++
Control de excepciones de C++

Mostrar: