elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [AYUDA] Como se de que tipo se creo una clase que deriba de otra
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [AYUDA] Como se de que tipo se creo una clase que deriba de otra  (Leído 3,701 veces)
_TTFH_3500

Desconectado Desconectado

Mensajes: 123



Ver Perfil
[AYUDA] Como se de que tipo se creo una clase que deriba de otra
« en: 16 Marzo 2019, 05:01 am »

Código
  1. #include <random>
  2. #include <cstdio>
  3. #include <stdexcept>
  4.  
  5. class Vehiculo {
  6. public:
  7.  virtual ~Vehiculo() { }; // Clase abstracta
  8. };
  9.  
  10. class Automovil : public Vehiculo {
  11. public:
  12.  int matricula = 4409;
  13. };
  14.  
  15. class Bicicleta : public Vehiculo {
  16. public:
  17.  int cambios = 18;
  18. };
  19.  
  20. void MostrarAtrb(const Vehiculo& vehiculo) {
  21.  try {
  22.    const Automovil& car = dynamic_cast<const Automovil&>(vehiculo);
  23.    printf("Es un Automovil con matricula: %d\n", car.matricula);
  24.  } catch(std::bad_cast &e) {
  25.    printf("Error %s\n", e.what());
  26.  }
  27.  try {
  28.    const Bicicleta& bici = dynamic_cast<const Bicicleta&>(vehiculo);
  29.    printf("Es una Bicicleta con %d cambios\n", bici.cambios);
  30.  } catch(std::bad_cast &e) {
  31.    printf("Error %s\n", e.what());
  32.  }
  33. }
  34.  
  35. int main() {
  36.  Vehiculo vehiculo;
  37.  if (rand() % 2 == 0)
  38.    vehiculo = Automovil();
  39.  else
  40.    vehiculo = Bicicleta();
  41.  MostrarAtrb(vehiculo); // Como se de que tipo se creo el objeto???
  42.  return 0;
  43. }
  44.  

Ambas conversiones de tipo dan error.


En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: [AYUDA] Como se de que tipo se creo una clase que deriba de otra
« Respuesta #1 en: 16 Marzo 2019, 05:15 am »

Una alternativa es que definas en la clase base un metodo virtual que se llame mostrar() o algo asi, y que todas las clases derivadas implementan, y con ello evitas tener que saber el tipo, solo dices vehiculo->mostrar(),  y ya.


En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Loretz

Desconectado Desconectado

Mensajes: 117


Ver Perfil
Re: [AYUDA] Como se de que tipo se creo una clase que deriba de otra
« Respuesta #2 en: 16 Marzo 2019, 06:59 am »

En tu ejemplo, MostrarAtrb(vehiculo); recibe un objeto Vehicle, que no tiene ruedas ni cambios.

El tipo estático de tu objeto "vehiculo" (definido en tiempo de compilación) es Vehicle, y el tipo dinámico (definido durante la ejecución) también lo es. Y al hacer vehiculo = Automovil(); o vehiculo = Bicicleta(); se asigna a vehiculo sólo la parte común entre un tipo y el otro. Es lo que se llama "Objet slicing".

El dynamic_cast va a fallar siempre.

En línea

srWhiteSkull


Desconectado Desconectado

Mensajes: 444



Ver Perfil WWW
Re: [AYUDA] Como se de que tipo se creo una clase que deriba de otra
« Respuesta #3 en: 16 Marzo 2019, 10:01 am »

Una alternativa es que definas en la clase base un metodo virtual que se llame mostrar() o algo asi, y que todas las clases derivadas implementan, y con ello evitas tener que saber el tipo, solo dices vehiculo->mostrar(),  y ya.
cierto.

pd sigo pensando que el foro debería tener un marcador de votos positivos para las publicaciones, si no destacarla cambiando el orden al menos resaltarla o poner un marcador, me evitaria el mensaje  :laugh:
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines