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.
Vorsicht |
---|
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. |