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

colegio4497 en disroot.org colegio4497 en disroot.org
Vie Nov 10 19:30:54 CET 2017


La verdad es que
estubo muy bien gracias!!!!!!!!!!!!!!!!!!!!
-------- Forwarded message -------
From: "Victor Cruz" <victor.cruz.isc en gmail.com (mailto:%22Victor%20Cruz%22%20<victor.cruz.isc en gmail.com>)>
To: "Lista de correo sobre C y C++" <cconclase en listas.conclase.net (mailto:%22Lista%20de%20correo%20sobre%20C%20y%20C++%22%20<cconclase en listas.conclase.net>)>
Sent: November 10, 2017 9:41 AM
Subject: Re: [C con Clase] Una cosa lo de la classe virtual para que sirve.......
 Excelente ejemplo, muy completo. Gracias. 
El 9 nov. 2017 12:51 PM, "Davidson, Steven" <srd4121 en njit.edu (mailto: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 (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 (mailto:colegio4497 en disroot.org)> wrote:
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net (mailto:Cconclase en listas.conclase.net)
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net (http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net)
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ (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/1ee7393c/attachment.html>


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