Condividi tramite


Funzioni virtuali private

La modalità di gestione delle funzioni virtuali private nelle classi derivate è stata modificata in Visual C++ 2010 rispetto alle estensioni gestite di C++.

Nelle estensioni gestite, il livello di accesso di una funzione virtuale non ne vincola la possibilità di essere sottoposta a override in una classe derivata. Nella nuova sintassi, una funzione virtuale non può eseguire l'override di una funzione virtuale di classe base a cui non può accedere. Di seguito è riportato un esempio:

__gc class MyBaseClass {
   // inaccessible to a derived class 
   virtual void g();
};

__gc class MyDerivedClass : public MyBaseClass {
public:
   // okay in Managed Extensions; g() overrides MyBaseClass::g()
   // error in new syntax; cannot override: MyBaseClass::g() is inaccessible …
   void g();
};

Non è disponibile un mapping effettivo di questo tipo di progettazione nella nuova sintassi. È semplicemente necessario rendere accessibili, ovvero non privati, i membri della classe base. I metodi ereditati non devono necessariamente disporre dello stesso accesso. Nell'esempio, la modifica meno invasiva consiste nell'impostare il membro MyBaseClass come protected. In questo modo, l'accesso al metodo del programma generale tramite MyBaseClass non è comunque consentito.

ref class MyBaseClass {
protected:
   virtual void g();
};

ref class MyDerivedClass : MyBaseClass {
public:
   virtual void g() override;
};

L'assenza nella nuova sintassi della parola chiave virtual esplicita nella classe base genera un messaggio di avviso.

Vedere anche

Riferimenti

Member Visibility

Concetti

Dichiarazioni di membri in una classe o interfaccia