Diferencia entre revisiones de «Programación en C++/Funciones virtuales»

Contenido eliminado Contenido añadido
Línea 576:
 
Para tener una idea del poder del concepto "una interface, multiples
metodos", examinemos el siguiente programa. esteEste crea una clase base
llamada 'figura'. Esta clase almacena las dimensiones de varios
objetos de 2-dimensiones y calcula sus areas. La funcion 'set_dim()'
Línea 630:
figura *p; // crear un puntero al tipo base.
 
triangulo t; // crear objetos de tipos derivados
rectangulo r;
Línea 641 ⟶ 640:
p->set_dim(10.0, 5.0);
p->mostrar_area();
 
return 0;
}
 
Línea 656 ⟶ 654:
</pre>
 
En el programa, notese que ambosambas la interfaceinterfaces, 'rectangulo' y
'triangulo', esson la misma, incluso ambosambas proveen sus propios metodos
para computar el area de cada uno de sus objetos.
 
Dada la declaracion para 'figura', es posible derivar una clase
llamada 'circulo' que computara el area de un circulo, dado en radio?
La rwspuestarespuesta es 'Si'. Todo lo que necesita hacer es crear un nuevo
tipo derivado que calcule el area de un circulo. El poder de las
funciones virtuales esesta basado en el hecho de que usted puede
facilmente derivar un nuevo tipo que mantendra un interface comun
con otros objetos relaciones. Por ejemplo, esta es una manera de
Línea 685 ⟶ 683:
Antes de intentar usar 'circulo', vea de cerca la definicion de
'mostrar_area()'. Note que esta usa solo el valor de x, el cual se
asume que almacenealmacena el radio. ( Recuerde, el area de un circulo es
calculada usando la formula 'PI*R a la 2'.) Sin embargo, la funcion
'set_dim()' como se define en 'figura', asume que seran pasados
dos valores, no solo uno. Como 'circulo.' no requiere este segundo
valor, que tipo de accion podemos tomar?
 
Línea 697 ⟶ 695:
especial, la cual viola la filosofia "una interface, muchos metodos".
 
Una mejor manera de resolver este problema es pasarseapasarle lal parametro 'y'
dentro de 'set_dim()' un valor por defecto. Entonces, cuando se llame
a 'set_dim()' para un circulo, necesitenecesita especificar solo el radio.
Cuando llame a 'set_dim()' para un triangulo o un rectangulo,
especificarespecificara ambos valores. El programa expandido, el cual usa este
metodo, es mostrado aqui: