Clase-base-virtual

Solo disponible en BuenasTareas
  • Páginas : 4 (789 palabras )
  • Descarga(s) : 7
  • Publicado : 14 de junio de 2009
Leer documento completo
Vista previa del texto
Resumen de clase-base virtuales.

Cuando se utiliza clase base virtual, se pude llegar a la misma funcin, objeto, tipo o enumerador, a travs de ms de una ruta de acceso (path) en el grafo dirigidoa cclico de clase base, sin que esto constituya una ambigedad. Por el contrario, se usan clases base no virtual si resulta una ambigedad: en ese caso, implica a ms de un objeto. Por ejemplo:

ClassV {public: int v ;};
Class A {public: int a ;};
Class B: public A, public virtual V {};
Class C: public A, public virtual V {};
Class D: public B, public C {public: void f(); };

Void D:: f(){
v++; // correcto: solo hay un objeto 'V' en 'D'
a++; //error, es ambigua: hay dos objetos 'a' en D
}

A travs de las distintas rutas de los grafos dirigidos a cclicos de clases base, se puedellegar a ms de una funcin, objeto o enumerador, cuando se utilizan clases base virtuales.

Esta es una explicacin ms explicita de clases-base virtuales.

En herencia mltiple, las clasesantecesoras no pueden repetirse:
class B { .... };

class D : B, B, ... { ... }; // Ilegal!

Si pueden repetirse indirectamente:

class B { .... };

class C1 : public B { ... };

class C2 :public B { ... };

class D : public C1, public C2 { ... }; // Ok.

En este caso, cada objeto de la clase D tiene dos subobjetos de la clase B.

Si esta duplicidad puede causar problemas, osencillamente no se desea, puede aadirse la palabra virtual a la declaracin de las clases-base, con lo que B es ahora una clase-base virtual y D solo contiene un subobjeto de dicha clase:

class B { ....};

class C1 : virtual public B { ... };

class C2 : virtual public B { ... };

class D : public C1, public C2 { ... }; // Ok.

Virtual es una palabra-clave C++ que tiene dos acepcionescompletamente diferentes dependiendo del contexto de su utilizacin. Utilizada con nombres de clase sirve para controlar aspectos del mecanismo de herencia; utilizada con nombres de funciones-miembro,...
tracking img