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 {}

virtualtipo 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
};

Vedi anche

Estensioni componenti per .NET e UWP