abstract (C++/CLI e C++/CX)
La parola chiave abstract dichiara:
Che un tipo può essere usato come tipo di base, ma non è possibile creare un'istanza del tipo stesso.
Che una funzione membro di tipo può essere definita solo in un tipo derivato.
Tutte le piattaforme
Sintassi
class-declaration class-identifier abstract {}
virtual
tipo restituitomember-function-identifier () abstract ;
Osservazioni:
La sintassi del primo esempio dichiara una classe astratta. Il componente di dichiarazione di classe può essere una dichiarazione C++ nativa (class
o struct
) o una dichiarazione di estensione C++ (classe di riferimento o struct di riferimento) se è specificata l'opzione /ZW
del compilatore o /clr
.
La sintassi del secondo esempio dichiara una funzione membro virtuale astratta. Dichiarare che una funzione astratta equivale a dichiararla come funzione virtuale pura. Dichiarare una funzione membro astratta comporta che la classe contenitore venga dichiarata astratta.
La parola chiave abstract è supportata in codice nativo e specifico della piattaforma, ovvero può essere compilata con o senza l'opzione del compilatore /ZW
o /clr
.
È possibile rilevare in fase di compilazione se un tipo è astratto con la caratteristica di tipo __is_abstract(type)
. Per altre informazioni, vedere Supporto del compilatore per caratteristiche di tipo.
La parola chiave abstract è un identificatore di override sensibile al contesto. Per altre informazioni sulle parole chiave sensibili al contesto, vedere Parole chiave sensibili al contesto. Per altre informazioni sugli identificatori di override, vedere Procedura: Dichiarare identificatori di override nelle compilazioni native.
Windows Runtime
Per altre informazioni, vedere Classi e struct di riferimento.
Requisiti
Opzione del compilatore: /ZW
Common Language Runtime
Requisiti
Opzione del compilatore: /clr
Esempi
L'esempio di codice seguente genera un errore perché la classe X
è contrassegnata come abstract.
// abstract_keyword.cpp
// compile with: /clr
ref class X abstract {
public:
virtual void f() {}
};
int main() {
X ^ MyX = gcnew X; // C3622
}
L'esempio di codice seguente genera un errore perché crea un'istanza di una classe nativa contrassegnata come abstract. Questo errore si verifica con o senza l'opzione del compilatore /clr
.
// 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'}
L'esempio di codice seguente genera un errore perché la funzione f
include una definizione, ma è contrassegnata come abstract. L'istruzione finale nell'esempio illustra che dichiarare una funzione virtuale astratta equivale a dichiarare una funzione virtuale pura.
// abstract_keyword_3.cpp
// compile with: /clr
ref class X {
public:
virtual void f() abstract {} // C3634
virtual void g() = 0 {} // C3634
};