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 class-declaration Komponente kann entweder eine systemeigene C++-Deklaration (class oder struct) oder Erweiterungsdeklaration einer C++ sein (ref class oder ref struct) 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.
Voraussetzungen
Compileroption: /ZW
Common Language Runtime
Voraussetzungen
Compileroption: /clr
Beispiele
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
};