• Domingo 28 de Abril de 2024, 17:27

Autor Tema:  Dudas POO/C++ (herencia y funciones virtuales)  (Leído 1508 veces)

lizzmdq

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Dudas POO/C++ (herencia y funciones virtuales)
« en: Viernes 20 de Mayo de 2011, 23:24 »
0
Hola, abro el tema debido a que me encuentro frente a el tema indicado en el titulo con dudas.

Respecto a mis apuntes sobre los temas los he entiendo, sus caracterisitcas y como funcionan pero al ponerlos en practica se me empiezan a plantear dudas, en este caso las voy a mostrar con ej que estoy haciendo.

Ej->Definir la jerarquía que considere adecuada con las siguientes clases: Figura,
Rectángulo y Triángulo Rectángulo. Implementar funciones para obtener el
perímetro y el área de cada una de ellas.

He realizado la siguiente solución :
Código: Text
  1.  
  2. class figura {
  3.     int b,h;
  4.     public:
  5.     figura(){b=h=0};
  6.     int obtiene_h(){return h};
  7.     int obtiene_b(){return b};
  8.     }
  9.    
  10. class rectan public:figura {
  11.  
  12.     public:
  13.     virtual int perim(){return 2*obtiene_h()+2*obtiene_b()};
  14.     virtual int area(){return obtiene_h()*obtiene_b()};
  15.     }
  16.  
  17. class trectan public:rectan {
  18.    
  19.     public:
  20.     int perim(){return .....}
  21.     int area(){return rectan::area()/2}
  22.     }
  23.  
  24. -------------
  25. main(){
  26. figura *pf[2];
  27. rectan r1;
  28. trectan tr1;
  29. pf[0]=&r1;
  30. pf[1]=&tr1;
  31. cout<<"Area de rectangulo"<<pf[0]->area();
  32. cout<<"Perim de rectangulo"<<pf[0]->perim();
  33.  
  34. cout<<"Area de T.rectangulo"<<pf[1]->area();
  35. cout<<"Perim de T.rectangulo"<<pf[1]->perim();
  36.  
  37.  
  38. .....}
  39.  
La jerarquía como se ve es: la clase FIGURA (como base) contiene atributos comunes para las subclases, y después la clase RECTÁNGULO derivada de figura y por último la clase TRECTAN derivada de la clase rectángulo debido a la relación que existe entre ellas.


Por un lado tengo la duda de como se ve en la CLASE TRECTAN en la función que calcula el perímetro, no sé como acceder a los atributos de la CLASE FIGURA (¿Podría usar obtiene_h & obtiene_b?, en el caso de la función Área me sirve la función que esta en CLASE RECTÁNGULO (¿Así es?

Finalmente quería saber si ustedes observan algún otro error en la solución.

Un saludo

ssaammuu

  • Miembro activo
  • **
  • Mensajes: 41
  • Nacionalidad: es
    • Ver Perfil
    • http://desarrollodejuegos.net
Re: Dudas POO/C++ (herencia y funciones virtuales)
« Respuesta #1 en: Sábado 21 de Mayo de 2011, 01:09 »
0
Crea los miembros como protegidos, no privados en la clase base, para poder acceder a ellos en las clases derivadas
Código: C++
  1. class figura {
  2.     protected:
  3.     int b,h;
  4.     public:
  5.     figura(){b=h=0};
  6.     int obtiene_h(){return h};
  7.     int obtiene_b(){return b};
  8.     }
  9.  

Así puedes hacer esto directamente...
Código: C++
  1. class rectan public:figura {
  2.     public:
  3.     virtual int area(){return h*b;};
  4.     }
  5.  

lizzmdq

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Dudas POO/C++ (herencia y funciones virtuales)
« Respuesta #2 en: Martes 24 de Mayo de 2011, 03:32 »
0
Muchas gracias por la respuesta. Entonces asi quedaría correcto.