Código
#include <random> #include <cstdio> #include <stdexcept> class Vehiculo { public: virtual ~Vehiculo() { }; // Clase abstracta }; class Automovil : public Vehiculo { public: int matricula = 4409; }; class Bicicleta : public Vehiculo { public: int cambios = 18; }; void MostrarAtrb(const Vehiculo& vehiculo) { try { const Automovil& car = dynamic_cast<const Automovil&>(vehiculo); printf("Es un Automovil con matricula: %d\n", car.matricula); } catch(std::bad_cast &e) { printf("Error %s\n", e.what()); } try { const Bicicleta& bici = dynamic_cast<const Bicicleta&>(vehiculo); printf("Es una Bicicleta con %d cambios\n", bici.cambios); } catch(std::bad_cast &e) { printf("Error %s\n", e.what()); } } int main() { Vehiculo vehiculo; if (rand() % 2 == 0) vehiculo = Automovil(); else vehiculo = Bicicleta(); MostrarAtrb(vehiculo); // Como se de que tipo se creo el objeto??? return 0; }
Ambas conversiones de tipo dan error.