Доступ к виртуальным функциям
Управление доступом, примененное к Виртуальный функции определяется типом, используемым для вызова функции.Переопределение объявлений функции не применяется к управление доступом для заданного типа.Примеры.
// 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.Это не означает, что вызываемая функция версия базового класса этой функции. |