typeinfo::bad_cast en C++ con ejemplos

C++ estándar contiene varias clases de excepción integradas. typeinfo::bad_cast es uno de ellos. Esta es una excepción que se produce cuando falla la conversión dinámica. A continuación se muestra la sintaxis para el mismo:

Archivo de cabecera:

<typeinfo>

Sintaxis:

class bad_cast;

Nota: Para hacer uso de std::bad_cast , se deben configurar los bloques try and catch apropiados.

Valor devuelto: No devuelve nada.

A continuación se muestran los ejemplos para comprender mejor la implementación de std::bad_cast :

Programa 1:

// C++ code for std::bad_cast
#include <bits/stdc++.h>
#include <typeinfo>
  
using namespace std;
  
// Base Class
class Base {
    virtual void member() {}
};
  
// Derived Class
class Derived : Base {
};
  
// main() method
int main()
{
  
    // try block
    try {
        Base gfg;
        Derived& rd
            = dynamic_cast<Derived&>(gfg);
    }
  
    // catch block to handle the errors
    catch (bad_cast& bc) {
        cerr << "bad_cast caught: "
             << bc.what() << endl;
    }
  
    return 0;
}

Producción:

bad_cast caught: std::bad_cast

Programa 2:

// C++ code for std::bad_cast
#include <bits/stdc++.h>
#include <typeinfo>
  
using namespace std;
  
// Base Class
class Base {
    virtual void member() {}
};
  
// Derived Class
class Derived : Base {
};
  
// main() method
int main()
{
  
    // try block
    try {
        Base geeksforgeeks;
        Derived& abc
            = dynamic_cast<Derived&>(
                geeksforgeeks);
    }
  
    // catch block to handle the errors
    catch (bad_cast& a) {
        cerr << "bad_cast caught: "
             << a.what() << endl;
    }
  
    return 0;
}

Producción:

bad_cast caught: std::bad_cast

Referencia: http://www.cplusplus.com/reference/typeinfo/bad_cast/

Publicación traducida automáticamente

Artículo escrito por bansal_rtk_ y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *