Share via


Acesso a funções virtuais

O controle de acesso é aplicado a virtual funções é determinado pelo tipo usado para fazer com que a função chamada.Declarações de substituição da função não afetam o controle de acesso para um determinado tipo.Por exemplo:

// 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;
}

No exemplo anterior, chamando a função virtual GetState usando um ponteiro para digitar VFuncBase chamadas VFuncDerived::GetState, e GetState é tratada como pública.No entanto, chamar GetState usando um ponteiro para digitar VFuncDerived é uma violação de controle de acesso porque GetState foi declarado particular na classe VFuncDerived.

Observação de cuidadoCuidado

A função virtual GetState pode ser chamado usando um ponteiro para a classe base VFuncBase.Isso não significa que a função de chamada é a versão da classe base dessa função.

Consulte também

Referência

Controle de acesso de membro