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
Class-Declaration Class-Identifier abstract {}
virtual
Rückgabetyp member-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
};