Compartir a través de


Acceso a las funciones de Virtual

El control de acceso aplicada a las funciones de virtual viene determinado por el tipo utilizado para realizar la llamada de función.Reemplazando las declaraciones de función no afectan al control de acceso para un tipo determinado.Por ejemplo:

// access_to_virtual_functions.cpp
class VFuncBase
{
public:
    virtual int GetState() { return _state; }
protected:
    int _state;
};

class VFuncDerived : public VFuncBase
{
private:
    int GetState() { return _state; }
};

int main()
{
   VFuncDerived vfd;             // Object of derived type.
   VFuncBase *pvfb = &vfd;       // Pointer to base type.
   VFuncDerived *pvfd = &vfd;    // Pointer to derived type.
   int State;

   State = pvfb->GetState();     // GetState is public.
   State = pvfd->GetState();     // C2248 error expected; GetState is private;
}

En el ejemplo anterior, llamar a la función virtual GetState mediante un puntero para escribir las llamadas VFuncDerived::GetStatede VFuncBase , y GetState se trata como público.Sin embargo, llamar a GetState mediante un puntero para escribir VFuncDerived es una infracción de control de acceso porque GetState se declara privado en la clase VFuncDerived.

Nota de precauciónPrecaución

La función virtual GetState se puede llamar mediante un puntero a la clase base VFuncBase.Esto no significa que la función llamada es la versión de la clase base de esa función.

Vea también

Referencia

Control de Miembro-Access