Freigeben über


Zugriff auf virtuelle Funktionen

Die Zugriffssteuerung, die auf virtuelle Funktionen angewendet wird, wird durch den Typ bestimmt, der den Funktionsaufruf ausführt. Überschreiben von Deklarationen der Funktion wirkt sich nicht auf die Zugriffssteuerung für einen angegebenen Typ aus. Beispiel:

// 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 auf Aufrufe des Typs VFuncBase, VFuncDerived::GetState und GetState als öffentlich behandelt. GetState jedoch mithilfe eines Zeigers auf den Typ VFuncDerived aufzurufen, ist eine Verletzung der Zugriffssteuerung, da GetState in der Klasse VFuncDerived privat deklariert ist.

Warnung

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

Siehe auch

Referenz

Memberzugriffssteuerung