abstract (C++/CLI und C++/CX)

Das abstract-Schlüsselwort nimmt eine der folgenden Deklarationen vor:

  • Ein Typ kann als Basistyp verwendet werden, aber der Typ selbst kann nicht instanziiert werden.

  • Eine Typmemberfunktion kann nur in einem abgeleiteten Typ definiert werden.

Alle Plattformen

Syntax

KlassendeklarationKlassenbezeichnerabstract {}

virtualreturn-typemember-function-identifier() abstract ;

Hinweise

Die erste Beispielsyntax deklariert eine Klasse als abstrakt. Die Klassendeklarationskomponente kann entweder eine systemeigene C++-Deklaration (class oder struct) oder eine C++-Erweiterungsdeklaration (Bezugsklasse oder Verweisstruktur) sein, wenn die /ZW/clr Compileroption angegeben ist.

Die zweite Beispielsyntax deklariert eine virtuelle Memberfunktion als abstrakt. Das Deklarieren einer Funktion als abstrakt ist mit dem Deklarieren als rein virtuelle Funktion identisch. Das Deklarieren einer Memberfunktion als abstrakt bewirkt, dass auch die einschließende Klasse als abstrakt deklariert wird.

Das abstract-Schlüsselwort wird in nativem und plattformspezifischem Code unterstützt, d.h. es kann mit oder ohne Compileroption /ZW oder /clr kompiliert werden.

Sie können mit der __is_abstract(type)-Typeigenschaft zum Zeitpunkt der Kompilierung ermitteln, ob ein Typ abstrakt ist. Weitere Informationen finden Sie unter Compilerunterstützung für Typmerkmale.

Das abstract-Schlüsselwort ist ein kontextbezogener Überschreibungsspezifizierer. Weitere Informationen zu kontextbezogenen Schlüsselwörtern finden Sie unter Kontextbezogene Schlüsselwörter. Weitere Informationen zum Außerkraftsetzen von Bezeichnern finden Sie unter How to: Declare Override Specifiers in Native Compilations.

Windows-Runtime

Weitere Informationen finden Sie unter Referenzklassen und -strukturen.

Anforderungen

Compileroption: /ZW

Übersicht: Common Language Runtime (CLR)

Anforderungen

Compileroption: /clr

Beispiele

Das folgende Codebeispiel generiert einen Fehler, da Klasse X als abstract gekennzeichnet ist.

// abstract_keyword.cpp
// compile with: /clr
ref class X abstract {
public:
   virtual void f() {}
};

int main() {
   X ^ MyX = gcnew X;   // C3622
}

Das folgende Codebeispiel generiert einen Fehler, da es eine native Klasse instanziiert, die als abstract gekennzeichnet ist. Dieser Fehler tritt mit und ohne Compileroption /clr auf.

// 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'}

Das folgende Codebeispiel generiert einen Fehler, da Funktion f eine Definition enthält, aber als abstract gekennzeichnet ist. Die letzte Anweisung im Beispiel zeigt, dass das Deklarieren einer abstrakten virtuellen Funktion dem Deklarieren einer rein virtuellen Funktion entspricht.

// abstract_keyword_3.cpp
// compile with: /clr
ref class X {
public:
   virtual void f() abstract {}   // C3634
   virtual void g() = 0 {}   // C3634
};

Siehe auch

Komponentenerweiterungen für .NET und UWP