Sdílet prostřednictvím


Přístup k virtuálním funkcím

Řízení přístupu aplikované pro virtuální funkce je určeno typem použitým z jejímu zavolání.Přepsání deklarací funkce neovlivňují řízení přístupu pro daný typ.Příklad:

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

V předchozím příkladu volání virtuální funkce GetState pomocí ukazatele na typ VFuncBase volá funkci VFuncDerived::GetState a funkce GetState je považována za veřejnou.Volání funkce GetState pomocí ukazatel na typ VFuncDerived je však narušením řízení přístupu, protože funkce GetState je ve třídě VFuncDerived deklarována jako soukromá.

Poznámka k upozorněníUpozornění

Virtuální funkci GetState lze zavolat pomocí ukazatele na základní třídu VFuncBase.To neznamená, že volaná funkce je verzí této funkce obsaženou v základní třídě.

Viz také

Referenční dokumentace

Ovládací prvek přístupu členů