Udostępnij za pośrednictwem


Dostęp do funkcji wirtualnych

Kontrola dostępu jest stosowany do wirtualnego funkcji jest określany na podstawie typu, używane do tworzenia funkcji wywołania.Przesłanianie deklaracji funkcji nie wpływają na kontrolę dostępu dla danego typu.Na przykład:

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

W powyższym przykładzie wywołanie funkcji wirtualnych GetState za pomocą wskaźnika typu VFuncBase wywołania VFuncDerived::GetState, i GetState jest traktowana jako publiczną.Jednakże wywoływania GetState za pomocą wskaźnika typu VFuncDerived jest naruszenie zasad kontroli dostępu, ponieważ GetState jest zadeklarowana jako private w klasie VFuncDerived.

Informacje dotyczące przestrogiPrzestroga

Funkcję wirtualną GetState można wywołać za pomocą wskaźnika do klasy bazowej VFuncBase.Oznacza to, że wywołano funkcję jest klasa bazowa wersję tej funkcji.

Zobacz też

Informacje

Kontrola dostępu Członkowskie