Condividi tramite


Accesso a funzioni virtuali

Il controllo accessi applicato alle funzioni virtuali è determinato dal tipo utilizzato per eseguire la chiamata di funzione. L'esecuzione dell'override delle dichiarazioni di funzione non influisce sul controllo accessi per un determinato tipo. Ad 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 mediante un al tipo VFuncDerived::GetState viene chiamato VFuncBase e GetState viene considerato come pubblico. Tuttavia, chiamando GetState con un puntatore al tipo VFuncDerived è una violazione del controllo accessi perché GetState è dichiarato privato nella classe VFuncDerived.

Avviso

La funzione virtuale GetState può essere chiamata utilizzando un puntatore alla classe base VFuncBase.Ciò non significa che la funzione chiamata è la versione della classe base di tale funzione.

Vedere anche

Riferimenti

Controllo dell'accesso ai membri