Udostępnij za pośrednictwem


Dostęp do funkcji wirtualnych

Kontrola dostępu stosowana w funkcjach wirtualnych jest określana przez typ używany do wywołania funkcji.Przesłanianie deklaracji funkcji nie wpływa 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 wirtualnej funkcji GetState używając wskaźnika na typ VFuncBase wywołuje VFuncDerived::GetState, i GetState jest traktowany jako public.Jednak wywołanie GetState używając wskaźnika na typ VFuncDerived spowoduje naruszenie zasad kontroli dostępu, ponieważ GetState jest zadeklarowana jako private w klasie VFuncDerived.

Informacje dotyczące przestrogiPrzestroga

Funkcja wirtualna GetState może być wywoływana za pomocą wskaźnika do klasy bazowej VFuncBase.Nie oznacza to, że wywoływana funkcja jest wersją funkcji z klasy bazowej.

Zobacz też

Informacje

Kontrola dostępu do elementów członkowskich