Vous êtes sur la page 1sur 3

1

TP3
Alex Javier Prez
C.E.: 00131692
Programacin para Ciencias e Ingeniera 2
ajperezv@usfq.edu.ec

AbstractEl presente deber analiza y realiza un ejemplo ms En la implementacin se especifica los mtodos vistos en
complejo con respecto al concepto de Herencia, con ayuda de la el header. SetRadio y GetRadio obtienen y establecen el valor
POO. Para ello, se utiliza la herencia de dos clases madre y se del atributo radio. Como mtodo adicional, CalcularArea hace
define una clase hija que hereda mtodos y atributos de ambas.
uso de este dato.
Index TermsPOO, herencia, clase derivada, clases madre, El constructor correspondiente inicializa el atributo. El de-
mtodos de la clase, atributos de la clase, header, implementacin.
structor, de forma diferente, informa cuando trabaja haciendo
notar a qu clase corresponde:
I. I NTRODUCCIN
Algorithm 2 Circulo.cpp
Para el uso de herencia mltiple se empieza definiendo a las 1: #include <iostream>
clases madres: Mesa y Circulo. Con sus respectivos mtodos 2: #include <string>
3: #include <math.h>
y atributos caracterizan a un objeto de tipo MesaRedonda, 4: #include "Circulo.h"
informando acerca de su altura y radio. 5:
6: using namespace std;
7:
Para el uso de herencia mltiple en la definicin de la 8: Circulo::Circulo()
9: {
clase hija MesaRedonda se declara a la clase, seguida por 10: radio = 0;
el operador : (smbolo de herencia) y una "," para que sea 11: }
12: Circulo::Circulo()
hija de ambas clases. De esta forma, se ahorra varias lneas 13: {
de cdigo similares, pero adems se debe evitar confusin al 14: cout"destructor de Circulo actuando..."endl;
15: }
tener mtodos similares en clases madres. 16: void Circulo::SetRadio(float radio)
17: {
18: this->radio = radio;
El presente programa caracteriza una mesa y adems se 19: }
obtiene el radio, altura y color de la misma. 20: float Circulo::GetRadio()
21: {
II. D ESARROLLO DEL D EBER 22: return radio;
23: }
La primera clase madre, Circulo, caracteriza a la mesa en 24: float Circulo::CalcularArea()
25: {
cuanto a su radio y rea. Para ello, se declaran mtodos set y 26: return (3.1416 * radio * radio);
get, que establecen y obtienen el radio de la mesa. Un mtodo 27: }
CalcularArea que retorna el rea de la mesa.
Siguiendo los estndares de la POO, se declara un constructor Se procede a definir la clase Mesa, la cual es la segunda
de la clase, inicializando el atributo radio, y un destructor clase madre. En su header, muy parecido a la anterior clase
que libera la memoria de atributo. Se declara al atributo madre, posee mtodos set y get para altura, al igual que su
protected para usar herencia. A continuacin se muestra el respectivo constructor, destructor, y dato miembro. Se observa
header correspondiente: el cdigo a continuacin:
Algorithm 1 Circulo.h Algorithm 3 Mesa.h
1: #ifndef CIRCULO_H 1: #ifndef MESA_H
2: #define CIRCULO_H 2: #define MESA_H
3: using namespace std; 3: class Mesa
4: 4: {
5: class Circulo 5: public:
6: { 6: Mesa();//constructor
7: public: 7: Mesa();//destructor
8: Circulo();//constructor 8: void SetAltura(float);
9: Circulo();//destructor 9: float GetAltura();
10: void SetRadio(float radio); 10: protected:
11: float GetRadio(); 11: float altura;
12: float CalcularArea(); 12: };
13: 13: #endif
14: protected:
15: float radio;
16: }; La implementacin de la segunda clase madre establece
17: #endif
que los mtodos SetAltura y GetAltura obtengan el dato del
2

atributo miembro. El constructor y destructor de esta clase Finalmente, se escribe el programa main.cpp en el cul se
trabajan con el atributo miembro altura: maneja mtodos y atributos tanto de las clases madre, como
de la clase hija.
Algorithm 4 Mesa.cpp Se nota que es necesario que dentro de la funcin main se
1: #include <iostream> creen objetos de tipo MesaRedonda, debido a que con estos
2: #include <string>
3: #include "Mesa.h" se puede manejar mtodos y atributos de las tres clases. Esto
4: using namespace std; ocurre debido a la herencia mltipleque tiene de las clases
5: Mesa::Mesa()
6: { madre.
7: altura = 0.0; Se crean datos tipo float, que pasarn como parmetros a los
8: }
9: Mesa::Mesa() mtodos set y get. Se observa el cdigo a continuacin:
10: {
11: cout"destructor de Mesa actuando..."endl; Algorithm 7 main.cpp
12: }
13: void Mesa::SetAltura(float altura) 1: #include <iostream>
14: { 2: #include <string>
15: this->altura=altura; 3: #include "Circulo.cpp"
16: } 4: #include "Mesa.cpp"
17: float Mesa::GetAltura() 5: #include "MesaRedonda.cpp"
18: { 6: using namespace std;
19: return altura; 7: int main()
20: } 8: {
9: MesaRedonda variable;
10: float varAltura, varRadio;
11: string varColor;
Con las clases madre ya establecidas, se define a la clase 12: cout"Ingrese la altura de la mesa"endl;
hija. Se nota que en su definicin, se usan los operadores ":" 13: cinvarAltura;
14: variable.SetAltura(varAltura);
y "," para la herencia mltiple: 15:
16: cout"Ingrese el radio de la mesa"endl;
Algorithm 5 MesaRedonda.h 17: cinvarRadio;
18: variable.SetRadio(varRadio);
1: #ifndef MESAREDONDA_H 19:
2: #define MESAREDONDA_H 20: cout"Ingrese el color de la mesa"endl;
3: class MesaRedonda : public Mesa, public Circulo 21: cinvarColor;
4: { 22: variable.SetColor(varColor);
5: public: 23:
6: MesaRedonda(); 24: variable.SetMesaRedonda(variable.GetRadio(),variable.GetAltura(),
7: MesaRedonda(); variable.GetColor());
8: void SetMesaRedonda(float radio, float altura, string color); 25:
9: void SetColor(string color); 26: return 0;
10: string GetColor(); 27: }
11: protected:
12: string color;
13: };
14: #endif III. R ESULTADOS
Se compila el programa main.cpp, al mismo tiempo que se
En la implementacin de la clase hija se observa que en el compila cada clase, por medio de la terminal de Ubuntu/Linux,
mtodo SetMesaRedonda se hace uso de atributos como altura por lo que en esta seccin se muestran las capturas de pantalla
y radio, de las clases madre: del programa funcionando:

Algorithm 6 MesaRedonda.cpp
1: #include <iostream>
2: #include <string>
3: #include <math.h>
4: #include "MesaRedonda.h"
5: using namespace std;
6: MesaRedonda::MesaRedonda()
7: {
8: string color = "";
9: }
10: MesaRedonda::MesaRedonda()
11: {
12: cout"destructor de MesaRedonda actuando..."endl;
13: }
14: void MesaRedonda::SetMesaRedonda(float radio, float altura, string color)
15: {
16: cout"Su mesa tiene una altura de "altura" metros, un radio de "radio" metros,
y su color es "colorendl;
17: }
18: void MesaRedonda::SetColor(string color)
19: {
20: this->color=color;
21: }
22: string MesaRedonda::GetColor()
23: {
24: return color; Fig. 1: Clase MesaRedonda actuando, hereda de Circulo y
25: } Mesa
3

IV. C ONCLUSIONES
El presente TP permite analizar un ejemplo complejo del
uso de herencia. En este caso, se usaron dos clases bases,
obteniendo as una herencia mltiple en la clase hija. Estas
clases juntas permiten obtener y devolver caractersticas
de una mesa, como el radio, altura y color, todos datos
ingresados por el usuario.

Se puede concluir, por el correcto funcionamiento del


programa main.cpp, que la herencia de una clase tambin
puede ser extendida a otra, por lo que se puede utilizar tanto
los mtodos como atributos en la clase hija: un ejemplo se
puede observar en el mtodo SetMesaRedonda.

Se concluye que adems de ahorrar cdigo, la herencia


no solamente es directa, sino tambin general para ms de 2
clases.

Vous aimerez peut-être aussi