[C con Clase] Una cosa lo de la classe virtual para que sirve.......

Victor Cruz victor.cruz.isc en gmail.com
Vie Nov 10 08:01:46 CET 2017


Excelente ejemplo, muy completo. Gracias.

El 9 nov. 2017 12:51 PM, "Davidson, Steven" <srd4121 en njit.edu> escribió:

> Hola Colegio,
>
> Sirve para preparar el uso de polimorfismo (dinámico). Brevemente, el
> polimorfismo es una prestación para manipular un objeto de una clase como
> si fuere de otra. Se necesita dos características para el polimorfismo:
>
> - Formación de una jerarquía (hereditaria) de clases virtuales
> - Manipulación de objetos, mediante un puntero o una referencia a ellos,
> de tal jerarquía de clases virtuales
>
> Por ejemplo,
>
> class vehiculo
> {
> public:
>   virtual void arrancar();
>   virtual void detener();
>   virtual void avanzar();
> };
>
> class automovil : public vehiculo
> {
> public:
>   virtual void arrancar();
>   virtual void detener();
>   virtual void avanzar();
> };
>
> class barco : public vehiculo
> {
> public:
>   virtual void arrancar();
>   virtual void detener();
>   virtual void avanzar();
> };
>
> class avion : public vehiculo
> {
> public:
>   virtual void arrancar();
>   virtual void detener();
>   virtual void avanzar();
> };
>
> int main()
> {
>   vehiculo * lista[5];
>
>   lista[0] = new barco;
>   lista[1] = new avion;
>   lista[2] = new atuomovil;
>   lista[3] = new atuomovil;
>   lista[4] = new avion;
>
>   for( int i=0; i < 5; i++ )
>   {
>     lista[i]->arrancar();
>     lista[i]->avanzar();
>   }
>   ...
> }
>
> Como puedes ver, 'lista' es un array de punteros a objetos de tipo
> 'vehiculo', por lo que podemos invocar las funciones miembro: 'arrancar()'
> y 'avanzar()'. Sin embargo, internamente cada objeto sabe cuál es su tipo
> original. Cuando se invoque una de estas funciones miembro virtuales,
> internamente se invocará la versión "correcta" que corresponde a su clase
> original. Por ejemplo,
>
> lista[0]->arrancar()  // se invocará:  barco::arrancar()  porque el objeto
> apuntado es en realidad de tipo 'barco'
> lista[1]->arrancar()  // se invocará:  avion::arrancar()
> lista[2]->arrancar()  // se invocará:  automovil::arrancar()
> lista[3]->arrancar()  // se invocará:  automovil::arrancar()
> lista[4]->arrancar()  // se invocará:  avion::arrancar()
>
>
> Echa un vistazo al capítulo 37 : http://c.conclase.net/curso/
> index.php?cap=037#inicio
>
>
> Espero que esto te oriente.
>
> Steven
>
>
> On Thu, Nov 9, 2017 at 11:39 AM, <colegio4497 en disroot.org> wrote:
>
>>
>>
>>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20171110/84e1c0e2/attachment-0001.html>


Más información sobre la lista de distribución Cconclase