Partager via


Accès aux fonctions virtuelles

Le contrôle d'accès appliqué aux fonctions de virtuel est déterminé par le type utilisé pour effectuer l'appel de fonction.En substituant les déclarations de la fonction n'affectent pas le contrôle d'accès d'un type donné.Par exemple :

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

Dans l'exemple précédent, l'appel de la fonction virtuelle GetState à l'aide d'un pointeur pour taper des appels VFuncDerived::GetStated' VFuncBase , et GetState est traité comme publics.Toutefois, l'appel GetState à l'aide d'un pointeur pour taper VFuncDerived est une violation de contrôle d'accès car GetState est déclaré privé dans la classe VFuncDerived.

Mise en gardeAttention

La fonction virtuelle GetState peut être appelée à l'aide d'un pointeur vers la classe de base VFuncBase.Cela ne signifie pas que la fonction appelée est la version de classe de base de cette fonction.

Voir aussi

Référence

Contrôle d'accès de membre