Share via


abstract (Komponentenerweiterungen für C++)

Das abstract-Schlüsselwort deklariert entweder:

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

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

Alle Plattformen

Syntax

class-declaration class-identifier abstract {}
virtual return-type member-function-identifier() abstract ;

Hinweise

Die erste Beispielssyntax deklariert eine Klasse, die abstrakt sein soll.Die Komponente Klassendeklaration kann entweder eine systemeigene C++-Deklaration (class oder struct) oder Erweiterungsdeklaration in C++ (ref class oder ref struct) sein, wenn die Compileroption /ZW oder /clr angegeben wird.

Die Syntax des zweiten Beispiels deklariert eine virtuelle Memberfunktion, die abstrakt sein soll.Die Deklaration einer abstrakten Funktion entspricht der Deklaration dieser Funktion als rein virtuelle Funktion.Das Deklarieren einer abstrakten Memberfunktion bewirkt auch, dass die einschließende Klasse abstrakt deklariert wird.

Das abstract-Schlüsselwort wird in systemeigenem und plattformspezifischem Code unterstützt. Das heißt, es kann mit oder ohne die Compileroption /ZW oder /clr kompiliert werden.

Sie können zur Kompilierzeit erkennen, ob ein Typ mit dem Typmerkmal __is_abstract(type) abstrakt ist.Weitere Informationen finden Sie unter Compilerunterstützung für Typmerkmale (Komponentenerweiterungen für C++).

Das abstract-Schlüsselwort ist ein kontextbezogener Überschreibungsspezifizierer.Weitere Informationen zu kontextbezogenen Schlüsselwörtern finden Sie unter Kontextbezogene Schlüsselwörter (Komponentenerweiterungen für C++).Weitere Informationen zu Überschreibungsspezifizierern finden Sie unter Gewusst wie: Deklarieren von Überschreibungsspezifizierern in systemeigenen Kompilierungen.

Windows-Runtime

Weitere Informationen finden Sie unter Verweisklassen und Strukturen.

b0z6b513.collapse_all(de-de,VS.110).gifAnforderungen

Compileroption: /ZW

Common Language Runtime

b0z6b513.collapse_all(de-de,VS.110).gifAnforderungen

Compileroption: /clr

b0z6b513.collapse_all(de-de,VS.110).gifBeispiele

Beispiel

Im folgenden Codebeispiel wird ein Fehler generiert, 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
}

Beispiel

Im folgenden Codebeispiel wird ein Fehler generiert, da er eine systemeigene Klasse instanziiert, die als abstract gekennzeichnet ist.Dieser Fehler tritt mit oder ohne /clr-Compileroption 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'}

Beispiel

Im folgenden Codebeispiel wird ein Fehler generiert, da die Funktion f eine Definition enthält, jedoch als abstract gekennzeichnet ist.Die Abschlussanweisung in den Beispielen zeigt, dass die Deklaration einer abstrakten virtuellen Funktion der Deklaration 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

Konzepte

Komponentenerweiterungen für Laufzeitplattformen