Funciones virtuales privadas

Actualización: noviembre 2007

La manera en que se controlan las funciones virtuales privadas en clases derivadas ha cambiado de Extensiones administradas para C++ a Visual C++ 2008.

En Extensiones administradas, el nivel de acceso de una función virtual no restringe su capacidad para ser reemplazada dentro de una clase derivada. En la nueva sintaxis, una función virtual no puede reemplazar a una función virtual de clase base a la que no puede tener acceso. Por ejemplo:

__gc class Foo {
   // inaccessible to a derived class 
   virtual void g();
};

__gc class Bar : public Foo {
public:
   // in Managed Extensions, ok: g() overrides Foo::g()
   // in new syntax, error: cannot override: Foo::g() is inaccessible …
   void g();
};

No hay ninguna asignación real de este tipo de diseño a la nueva sintaxis. Se debe permitir simplemente el acceso a los miembros de clase base, es decir que no sean privados. Los métodos heredados no tienen que soportar el mismo acceso. En este ejemplo, el cambio menos invasivo es hacer que los miembros estén Fooprotected. Este modo, en que el programa general tiene acceso al método mediante Foo, sigue estando prohibido.

ref class Foo {
protected:
   virtual void g();
};

ref class Bar : Foo {
public:
   virtual void g() override;
};

Observe que la ausencia de la palabra clave virtual explícita en la clase base, en la nueva sintaxis, genera un mensaje de advertencia.

Vea también

Conceptos

Declaraciones de miembros en una clase o interfaz

Referencia

Member Visibility