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

Davidson, Steven srd4121 en njit.edu
Jue Nov 9 19:51:03 CET 2017


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:

>
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20171109/f4988448/attachment.html>


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