04.06.2015 Views

Manual básico de Programación en C++

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!