SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: lizzmdq en Viernes 20 de Mayo de 2011, 23:24

Título: Dudas POO/C++ (herencia y funciones virtuales)
Publicado por: lizzmdq en Viernes 20 de Mayo de 2011, 23:24
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
Título: Re: Dudas POO/C++ (herencia y funciones virtuales)
Publicado por: ssaammuu en Sábado 21 de Mayo de 2011, 01:09
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.  
Título: Re: Dudas POO/C++ (herencia y funciones virtuales)
Publicado por: lizzmdq en Martes 24 de Mayo de 2011, 03:32
Muchas gracias por la respuesta. Entonces asi quedaría correcto.