Utilizzo di una funzione virtuale sealed
La sintassi per l'utilizzo di una funzione virtuale sealed è stata modificata in Visual C++ rispetto alle estensioni gestite di C++.
La parola chiave __sealed viene utilizzata nelle estensioni gestite per modificare un tipo di riferimento, non consentendo la successiva derivazione (vedere Dichiarazione di un tipo classe gestito), oppure per modificare una funzione virtuale, non consentendo il successivo override del metodo in una classe derivata.Di seguito è riportato un esempio:
__gc class base { public: virtual void f(); };
__gc class derived : public base {
public:
__sealed void f();
};
Nell'esempio, derived::f() esegue l'override dell'istanza di base::f() in base alla corrispondenza esatta del prototipo di funzione.La parola chiave __sealed indica che una successiva classe ereditata dalla classe derivata non può fornire un override di derived::f().
Nella nuova sintassi, la parola chiave sealed viene inserita dopo la firma, anziché essere consentita in qualsiasi posizione prima del prototipo di funzione effettivo come in precedenza.L'utilizzo di sealed richiede inoltre l'utilizzo esplicito anche della parola chiave virtual.Di seguito è riportata la conversione corretta del precedente esempio di derived:
ref class derived: public base {
public:
virtual void f() override sealed;
};
L'assenza della parola chiave virtual in questa istanza determina un errore.Nella nuova sintassi, la parola chiave contestuale abstract può essere utilizzata al posto di =0 per indicare una funzione virtuale pure.Ciò non è supportato nelle estensioni gestite.Di seguito è riportato un esempio:
__gc class base { public: virtual void f()=0; };
può essere riscritto come segue:
ref class base { public: virtual void f() abstract; };
Vedere anche
Riferimenti
sealed (Estensioni del componente C++)
Concetti
Dichiarazioni di membri in una classe o interfaccia (C++/CLI)