abstract (C++/CLI i C++/CX)
Słowo kluczowe abstrakcyjne deklaruje jedną z następujących opcji:
Typ może być używany jako typ podstawowy, ale nie można utworzyć wystąpienia samego typu.
Funkcję składową typu można zdefiniować tylko w typie pochodnym.
Wszystkie platformy
Składnia
abstrakcji identyfikatora klasy deklaracji klasy{}
virtual
zwracany typ member-function-identifier () abstract ;
Uwagi
Pierwsza przykładowa składnia deklaruje, że klasa ma być abstrakcyjna. Składnik deklaracji klasy może być natywną deklaracją języka C++ (class
lub struct
) albo deklaracją rozszerzenia C++ (klasa ref lub struktura ref), jeśli /ZW
określono opcję lub /clr
kompilatora.
Druga przykładowa składnia deklaruje, że wirtualna funkcja składowa ma być abstrakcyjna. Deklarowanie abstrakcyjnej funkcji jest takie samo jak deklarowanie jej czystej funkcji wirtualnej. Deklarowanie abstrakcyjnej funkcji składowej powoduje również zadeklarowanie abstrakcyjnej klasy otaczającej.
Słowo kluczowe abstrakcyjne jest obsługiwane w kodzie natywnym i specyficznym dla platformy. Oznacza to, że można go skompilować z opcją lub bez opcji kompilatora /ZW
lub /clr
.
W czasie kompilacji można wykryć, czy typ jest abstrakcyjny z cechą __is_abstract(type)
typu. Aby uzyskać więcej informacji, zobacz Obsługa kompilatora dla cech typów.
Słowo kluczowe abstrakcyjne jest specyfikatorem zastępowania kontekstowego. Aby uzyskać więcej informacji na temat słów kluczowych kontekstowych, zobacz Kontekstowe słowa kluczowe. Aby uzyskać więcej informacji na temat specyfikatorów przesłonięcia, zobacz Instrukcje: deklarowanie specyfikatorów przesłonięcia w kompilacjach natywnych.
Środowisko wykonawcze systemu Windows
Aby uzyskać więcej informacji, zobacz Ref classes and structs (Klasy ref i struktury).
Wymagania
Opcja kompilatora: /ZW
środowiska uruchomieniowe w trakcie wykonania
Wymagania
Opcja kompilatora: /clr
Przykłady
Poniższy przykład kodu generuje błąd, ponieważ klasa X
jest oznaczona jako abstrakcyjna.
// abstract_keyword.cpp
// compile with: /clr
ref class X abstract {
public:
virtual void f() {}
};
int main() {
X ^ MyX = gcnew X; // C3622
}
Poniższy przykład kodu generuje błąd, ponieważ tworzy wystąpienie klasy natywnej oznaczonej jako abstrakcyjna. Ten błąd wystąpi z opcją kompilatora lub bez tej /clr
opcji.
// 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'}
Poniższy przykład kodu generuje błąd, ponieważ funkcja f
zawiera definicję, ale jest oznaczona jako abstrakcyjna. Końcowa instrukcja w przykładzie pokazuje, że deklarowanie abstrakcyjnej funkcji wirtualnej jest równoważne deklarowaniu czystej funkcji wirtualnej.
// abstract_keyword_3.cpp
// compile with: /clr
ref class X {
public:
virtual void f() abstract {} // C3634
virtual void g() = 0 {} // C3634
};
Zobacz też
Rozszerzenia składników dla platformy .NET i platformy uniwersalnej systemu Windows