Está en la página 1de 6

Explicacion del codigo sobre clases y herencia

Carlos Eduardo Daz Jaramillo


February 2015

C
odigo

El c
odigo a explicar es el siguiente, en donde se enumeraron las lneas a explicarse:
1 # include <iostream>
2 # <string>
3 #define PI 3.14159
4
{
5
6
7

class figura
protected:
int dimension;
std::string nombre;

8 public:
9 figura() :
10 dimension( 0 ), nombre( ){};
11 figura( int dimension, std::string nombre ) :
12 dimension( dimension ), nombre( nombre ){};
13 inline int dimension(){ return dimension; };
14 inline std::string nombre(){ return nombre; };
15 virtual void print(){};
};
16 class rectangulo : public figura
{
17 private:
18 double alto, ancho;
19 public:

20
21
22
23
24
25
26
27
28
29

rectangulo( double alto, double ancho ) :


figura( 2, rectangulo ), alto( alto ), ancho( ancho ){};
inline double area(){ return alto* ancho; };
inline double perimetro(){ return 2.*( alto+ ancho); };
inline bool cuadrado(){ return ( alto== ancho)? true : false; };
inline void print() {
std::cout << this > nombre() << >
<< area: << this > area()
<< perimetro: << this > perimetro()
<< std::endl; }

};
30 class circulo : public figura
{
31 private:
32 double radio;
33
34
35
36
37
38
39
40
41
42

public:
circulo( double radio ) :
figura( 2, circulo ), radio( radio ){};
inline double area(){ return radio* radio*PI; };
inline double perimetro(){ return 2.* radio*PI; };
inline double radio(){ return radio; }
inline void print() {
std::cout << this > nombre() << >
<< area: << this > area()
<< perimetro: << this > perimetro()

43 << std::endl;
}
};
44 class cilindro : public figura
{
45 private:
46 double alto;
47 circulo base;
48
49
50
51

public:
cilindro( double alto, double radio ) :
figura( 3, cilindro ), alto( alto ), base( circulo( radio ) ) {};
inline double area(){ return base.perimetro()* alto; };
2

52
53
54
55
56
57
58
}

inline double volumen(){ return base.area()* alto; };


inline circulo base() { return base; };
inline void print() {
std::cout << this > nombre() << >
<< area superficial: << this > area()
<< volumen: << this > volumen()
<< std::endl;

};
59 class cubo : public figura
{
60 private:
61 double alto;
62 rectangulo base;
63
64
65
66
67
68
69
70
71
72
}

public:
cubo( double alto, double ancho, double largo ) :
figura( 3, cubo ), alto( alto ), base( rectangulo( ancho, largo ) ) {};
inline double area(){ return base.perimetro()* alto; };
inline double volumen(){ return base.area()* alto; };
inline void print() {
std::cout << this > nombre() << >
<< area superficial: << this > area()
<< volumen: << this > volumen()
<< std::endl;

};
73
74
75
76
77
78
79
}

int main(){
cubo c1( 2., 3., 4.);
cilindro c2( 2., 4.);
c1.print();
c2.print();
c2.base().print();
return 0;

Note que en este texto no se ecuentra el uso adecuado de TABS, ya que lo


que importa aqu es la explicacion del codigo mostrado.

Explicaci
on

En las lneas 1 y 2 se incluyen como comando del preprocesador las libreras


iostream y string. En la lnea 3 se define PI. En la lnea 3 se empieza declarando
la primera clase, figura.
En la lnea 5 se crea el acceso protegido, que es una seccion en donde los
miembros incluidos solo pueden ser usados por los objetos de la misma clase, en
este caso figura. Sin embargo si una clase es derivada de figura, es decir,
hay herencia, los miembros creados dentro del protectec si pueden ser usados.
En la lnea 6 y 7 se define el entero dimension y el string nombre para
ser usados posteriormente. En la lnea 8 se crea el acceso p
ublico, que a diferencia del privado y el protegido, no tiene alguna restriccion para el uso de sus
miembros en otras clases.
En la lnea 9 se define el constructor figura. Un constructor es un miembro
especial que sirve para inicializar un objeto de una determinada clase al mismo
tiempo que se declara. Luego en la lnea 10 se usan los miembros de la seccion
protected para crear funciones dimension y nombre, retornando enteros y
strings respectivamente.
En la lnea 11 define el entero dimension y el string nombre. Con
esto, en la siguiente lnea, se usa lo definido como parametros de las funciones
dimension y nombre. Luego en las lneas 13 y 14 se definen las funciones
inline de dimension y nombre, con las propiedades de entero y string correspondientes. Esto es u
til aqu, ya que las funciones dadas tienen una definicion
muy breve. Al declararlas como inline, el codigo generado para la funcion cuando
el programa se compila, se inserta en el punto donde se invoca a la funcion, en
lugar de hacerlo en otro lugar y hacer una llamada.
En la lnea 15 se declara la funcion virtual print de caracter void. Al definir
la funci
on como virtual, podemos superponerla en otra clase como herencia y al
invocarla usando un puntero de la clase base, se ejecutara la version de la clase
derivada.
En la lnea 16 se inicia la clase rectangulo, creandola con la propiedad de la
herencia a partir de los miembros public de figura. En la lnea 17 se crea la
secci
on privada, en donde los miembros de la clase solo pueden ser usados por
la misma. Se define en la lnea 18, dentro del privado, las variables alto y
ancho. El double es similar al flotante, pero trae una precision mayor.
En la lnea 19 se define la seccion p
ublica de la clase. En la siguiente lnea
se crea el constructor rectangulo con los parametros mostrados en el codigo.
En la lnea 21 se hace llamado del constructor figura de la seccion p
ublica de
la clase figura. Como se ve en el codigo, se a
naden las variables del tipo int
4

y string, como se especific


o en la clase figura. En la misma lnea se definen
alto y ancho usando los parametros definidos en el private.
En las lneas 22 y 23 se definen los inline double para retornar el area y
el permetro del rect
angulo. En la lnea 24 se crea la funcion de tipo bool
para ver si el rect
angulo es un cuadrado o no, por eso se pone como condicion
alto== ancho.
En la lnea 25 se hace llamado de la funcion virtual void print proveniente
de la clase figura. Se ve aqu que se ejecutara la version definida en la clase
rect
angulo. Se mostrar
a en esta parte, si es llamada en el int main, el nombre
de la figura, su
area y su permetro.
Como ya se han explicado hasta el momento las caractersticas principales
usadas en este ejemplo, se hara una descripcion menos detallada del codigo similar al descrito, para evitar explicar lo mismo.
En la lnea 30 se define la clase crculo heredando los mienbros public de la
clase figura. En la secci
on privada, en la lnea 32, se define un double.
En la secci
on public, de la lnea 33 a la 38 se definen los constructores adecuados para calcular el
area y el permetro de un crculo.
En la lnea 44 se define la clase cilindro usando los miembros publicos de
la clase figura. En la seccion privada se define el double alto y se usa de
la clase crculo para definir base.
En la secci
on public, en la lnea 49 se define el constructor cilindro con los
par
ametros mostrados. En la lnea 50 se pone el nombre y la dimension de la
figura, y luego se usa como parametros de alto y base a alto y circulo(
radio ) respectivamente. Este segundo usara al radio definido en la clase
circulo.
En las lneas 51 y 52 se define el area superficial y el volumen del cilindro.
En el primero, se usa el metodo base.perimetro(), que usando a la variable
radio, llama al obejto permetro con el fin de calcular al area (area cilindro=
permetro de base * alto). Como sugerencia, se debe especificar en esta zona
que se est
a calculando el
area de un cilindro sin tapas. Si no es as, en el return
escribira yo un + 2* base.area() con el fin de calcular de manera correcta el
area del cilindro.

De la misma manera se define en la lnea 52 el volumen del cilindro usando


el metodo base.area() como parametro. En la lnea 53 se define circulo base()
para poder ser llamado en el main.
De la lnea 63 a la 72 se define la clase cubo, pero llamando a la clase
rectangulo. Como sugerencia, no llamara a la clase como cubo, ya que la
5

figura expresada en el c
odigo conduce a un paraleleppedo.
Por u
ltimo, dentro del main se imprimen algunos resultados, llamando a la
funci
on print. Se define c1 y c2 con algunos valores de la manera en que se
muestra en el c
odigo, entre las lneas 74 y 75. De la lnea 76 a la 78 se imprimen
los resultados con los ci ya definidos.
De esta manera termina la explicacion al codigo referente a herencias y clases.

También podría gustarte