Aracılığıyla paylaş


Sanal işlevlerine erişimi

Erişim denetimi için uygulanan sanal işlevler işlev çağrısı yapmak için kullanılan türü tarafından belirlenir.Erişim denetimi belirli bir türü için geçersiz kılma bildirimlerini işlevin etkilemez.Örne?in:

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

Yukarıdaki örnekte, sanal işlevi çağırmadan GetState yazmak için bir işaretçi kullanarak VFuncBase çağrıları VFuncDerived::GetState, ve GetState genel olarak kabul edilir.Ancak, arama GetState yazmak için bir işaretçi kullanarak VFuncDerived Denetim erişim ihlali, çünkü GetState sınıfında özel olarak bildirilmiş VFuncDerived.

Uyarı notuUyarı

Sanal işlevi GetState temel sınıf işaretçisi kullanılarak çağrılabilir VFuncBase.Bu çağrılan işlev bu işlevi temel sınıf sürümü olduğu anlamına gelmez.

Ayrıca bkz.

Başvuru

Üye erişim denetimi