Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
il controllo di accesso applicato a virtuale le funzioni è determinata dal tipo utilizzato per eseguire la chiamata di funzione.Override delle dichiarazioni di funzione non influiscono sul controllo di accesso per un determinato tipo.Di seguito è riportato un esempio:
// 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;
}
Nell'esempio precedente, chiamando la funzione virtuale GetState utilizzando un puntatore al tipo VFuncBase chiamate VFuncDerived::GetStatee GetState viene trattato come pubblici.tuttavia, chiamando GetState utilizzando un puntatore al tipo VFuncDerived è una violazione di controllo di accesso perché GetState è privato dichiarato nella classe VFuncDerived.
Attenzione |
|---|
la funzione virtuale GetState può essere chiamato utilizzando un puntatore alla classe di base VFuncBase.Ciò non significa che la funzione chiamata è la versione della classe base di tale funzione. |
Attenzione