Доступ к виртуальным функциям

Управление доступом, примененное к Виртуальный функции определяется типом, используемым для вызова функции.Переопределение объявлений функции не применяется к управление доступом для заданного типа.Примеры.

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

В предыдущем примере при вызове виртуальная функция GetState использование указатель для печати VFuncBase вызовы VFuncDerived::GetStateи GetState рассматривается как открытый.Однако вызов GetState использование указатель для печати VFuncDerived нарушение управления доступом, поскольку GetState объявленным как закрытый в классе VFuncDerived.

Предупреждающее замечаниеВнимание

виртуальная функция GetState может быть вызван, используя указатель на базовый класс VFuncBase.Это не означает, что вызываемая функция версия базового класса этой функции.

См. также

Ссылки

Управление Участник-Доступа