Freigeben über


Zugriff auf die virtuellen Funktionen

Die Zugriffssteuerung, die virtuell-Funktionen angewendet wird, wird durch den Typ angibt, der verwendet wird, um den Funktionsaufruf ausführen.Überschreiben von Deklarationen der Funktion wirken sich nicht auf die Zugriffssteuerung für einen angegebenen Typ.Beispiele:

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

Im vorherigen Beispiel wird das Aufrufen der virtuellen Funktion GetState mithilfe eines Zeigers, um VFuncBase Aufrufe VFuncDerived::GetStateeinzugeben und des GetState als öffentlich behandelt.GetState jedoch mithilfe eines Zeigers ist aufrufen, um eine Eingabe VFuncDerived Zugriffssteuerung verletzung, da GetStateVFuncDerivedin der Klasse privat deklariert ist.

WarnhinweisVorsicht

Die virtuelle Funktion GetState kann mithilfe eines Zeigers auf die Basisklasse VFuncBaseaufgerufen werden.Dies bedeutet nicht, dass die aufgerufene Funktion die Basisklassenversion dieser Funktion ist.

Siehe auch

Referenz

Zugriffssteuerung