abstract (Estensioni del componente C++)
La parola chiave abstract può dichiarare:
Un tipo che può essere utilizzato come tipo di base, ma del quale non è possibile creare un'istanza.
Una funzione membro di un tipo che può essere definita solo in un tipo derivato.
Tutte le piattaforme
Sintassi
class-declaration class-identifier abstract {}
virtual return-type member-function-identifier() abstract ;
Osservazioni
Il primo esempio di sintassi dichiara una classe come astratta. Il componente class-declaration può essere sia una dichiarazione C++ nativa (class o struct) sia una dichiarazione dell'estensione di C++ (ref class o ref struct) se è specificata l'opzione del compilatore /ZW o /clr.
La seconda sintassi di esempio dichiara una funzione membro virtuale come astratta. Dichiarare una funzione astratta equivale ad averla dichiarata come funzione virtuale pura. Dichiarare una funzione membro astratta fa si che anche la classe in cui è contenuta debba essere dichiarata astratta.
La parola chiave abstract è supportata in codice nativo e in codice specifico per la piattaforma, ovvero può essere compilata con o senza l'opzione /clr o /ZW del compilatore.
È possibile rilevare in fase di compilazione se un tipo è astratto con il tratto di tipo __is_abstract(type). Per ulteriori informazioni, vedere Supporto del compilatore per tratti di tipo (Estensioni del componente C++).
La parola chiave abstract è un identificatore di override sensibile al contesto. Per ulteriori informazioni sulle parole chiave sensibili al contesto, vedere la pagina Parole chiave sensibili al contesto (Estensioni del componente C++). Per ulteriori informazioni sugli identificatori di override, vedere la pagina Procedura: dichiarare gli identificatori di override nelle compilazioni native.
Windows Runtime
Per ulteriori informazioni, vedere classi e strutture di Ref.
Requisiti
Opzione del compilatore: /ZW
Common Language Runtime
Requisiti
Opzione del compilatore: /clr
Esempi
Esempio
L'esempio di codice seguente genera un errore perché la classe X è abstract.
// abstract_keyword.cpp
// compile with: /clr
ref class X abstract {
public:
virtual void f() {}
};
int main() {
X ^ MyX = gcnew X; // C3622
}
Esempio
L'esempio di codice seguente genera un errore perché crea un'istanza di una classe nativa che è contrassegnata con abstract. Questo errore si verifica sia con che senza l'opzione /clr del compilatore.
// abstract_keyword_2.cpp
class X abstract {
public:
virtual void f() {}
};
int main() {
X * MyX = new X; // C3622: 'X': a class declared as 'abstract'
// cannot be instantiated. See declaration of 'X'}
Esempio
L'esempio di codice seguente genera un errore perché la funzione f include una definizione ma è stata contrassegnata come abstract. L'istruzione finale nell'esempio seguente mostra che dichiarare una funzione virtuale astratta equivale ad averla dichiarata come funzione virtuale pura.
// abstract_keyword_3.cpp
// compile with: /clr
ref class X {
public:
virtual void f() abstract {} // C3634
virtual void g() = 0 {} // C3634
};