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


 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  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 736 veces)
_TTFH_3500

Desconectado Desconectado

Mensajes: 119



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

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: 322


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 »

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

Loretz

Desconectado Desconectado

Mensajes: 107


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 »

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: 437



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 »

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:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Acceder a una variable privada de una clase desde otra clase
Programación C/C++
Alvaro093 4 24,817 Último mensaje 27 Enero 2012, 09:46
por wachi
Acceder a variables de una clase desde otra clase?
Programación C/C++
overxfl0w13 1 1,882 Último mensaje 12 Julio 2012, 00:52
por eleon
como pasar un dato a otra clase?
Java
owen 3 1,437 Último mensaje 13 Febrero 2016, 17:15
por 0xFer
Mandar a traer metodos de una clase a otra clase en python
Dudas Generales
snow915 1 1,106 Último mensaje 17 Junio 2017, 03:31
por engel lex
Llamar a la funcion de una clase desde otra clase
PHP
facuzek232 0 809 Último mensaje 4 Agosto 2017, 02:01
por facuzek232
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines