Přístup k virtuální funkce
Řízení přístupu u virtuální funkce závisí na typu použité k volání funkce.Převažující deklarace funkce řízení přístupu pro daný typ neovlivní.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í funkce virtuální GetState použití ukazatele zadejte VFuncBase volání VFuncDerived::GetState, a GetState je považována za veřejné.Volání však GetState použití ukazatele zadejte VFuncDerived je narušení řízení přístupu, protože GetState je deklarována jako soukromá třídy VFuncDerived.
Upozornění |
---|
Funkce virtuální GetState lze volat pomocí ukazatele na základní třídy VFuncBase.To neznamená, že funkce nazývá je základní třída verzi funkce. |