You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
7. POLIMORFISMO<br />
Es la capacidad <strong>de</strong> objetos <strong>de</strong> clases distintas, relacionados mediante la her<strong>en</strong>cia, a<br />
respon<strong>de</strong>r <strong>de</strong> forma difer<strong>en</strong>te a una misma llamada <strong>de</strong> función miembro. En <strong>C++</strong>, el<br />
polimorfismo se realiza por uno <strong>de</strong> los métodos sigui<strong>en</strong>tes: sobrecarga <strong>de</strong> operadores o<br />
funciones virtuales.<br />
Po<strong>de</strong>mos <strong>de</strong>clarar que los métodos <strong>de</strong> las clases sean virtual con el fin <strong>de</strong> forzar que<br />
su evaluación se base <strong>en</strong> el cont<strong>en</strong>ido <strong>de</strong> los objetos más que <strong>en</strong> su tipo. Con el uso <strong>de</strong><br />
esta palabra clave, una función pue<strong>de</strong> estar <strong>de</strong>finida <strong>en</strong> una clase base y <strong>en</strong> su clase<br />
<strong>de</strong>rivada bajo el mismo nombre. La función no <strong>de</strong>berá ser <strong>de</strong>clarada virtual más que <strong>en</strong><br />
la clase base:<br />
class ObjetoDesplegable<br />
{<br />
public:<br />
virtual void print( );<br />
};<br />
La clase ObjetoDesplegable <strong>de</strong>fine un método print( ), el cual es virtual. De esta clase<br />
po<strong>de</strong>mos <strong>de</strong>rivar otras clases:<br />
class Punto: public ObjetoDesplegable<br />
{<br />
...<br />
public:<br />
...<br />
void print( ) { ... }<br />
};<br />
Nuevam<strong>en</strong>te, print( ) es un método virtual <strong>de</strong>bido a que hereda esta propiedad <strong>de</strong><br />
ObjetoDesplegable. La función display( ), que es capaz <strong>de</strong> dibujar cualquier tipo <strong>de</strong><br />
objeto <strong>de</strong>splegable, pue<strong>de</strong> por tanto ser <strong>de</strong>finida como:<br />
void display ( const ObjetoDesplegable &obj)<br />
{<br />
obj.print ( );<br />
};<br />
Cuando se usan métodos virtuales, el <strong>de</strong>structor <strong>de</strong> la clase correspondi<strong>en</strong>te <strong>de</strong>be ser<br />
<strong>de</strong>clarado también virtual cuando se usan apuntadores a subclases (virtuales) cuando<br />
llega el mom<strong>en</strong>to <strong>de</strong> <strong>de</strong>struirlas. Debido a que el apuntador está <strong>de</strong>clarado como<br />
superclase, su <strong>de</strong>structor normalm<strong>en</strong>te sería llamado.