abstract (C++ Component Extensions)
Słowo kluczowe abstract deklaruje jedno z poniższych:
Typ może służyć jako typ podstawowy, ale nie można utworzyć wystąpienia typu.
Funkcje elementów członkowskich typu można zdefiniować tylko w typie pochodnym.
Wszystkie platformy
Składnia
class-declaration class-identifier abstract {}
virtual return-type member-function-identifier() abstract ;
Uwagi
Pierwsza przykładowa składnia deklaruje, że klasa jest abstrakcyjna.Komponent deklaracja klasy może być albo macierzystą deklaracją języka C++ (class lub struct), albo deklaracją rozszerzenia języka C++ (ref class lub ref struct), jeśli została określona opcja kompilatora /ZW lub /clr.
Druga przykładowa składnia deklaruje wirtualną funkcję elementu członkowskiego jako funkcję abstrakcyjną.Deklaracja streszczenia funkcji jest równoznaczna z uznaniem go za czystego funkcję wirtualną.Deklaracja abstrakcyjnego członka funkcji powoduje również wyliczenie klas, które mają zostać zadeklarowane jako abstrakcyjne.
Słowo kluczowe abstract jest obsługiwane w kodzie macierzystym i specyficznym dla platformy; oznacza to, że może ono być kompilowane z lub bez opcji kompilatora /ZW lub /clr.
W czasie kompilacji możesz wykryć, czy typ jest abstrakcyjny za pomocą cechy typu __is_abstract(type).Aby uzyskać więcej informacji, zobacz Obsługa cech typu w kompilatorze (C++ Component Extensions).
Słowo kluczowe abstract jest kontekstowym specyfikatorem nadpisania.Aby uzyskać więcej informacji na temat słów kluczowych uzależnionych od kontekstu, zobacz Kontekstowe słowa kluczowe (C++ Component Extensions)Aby uzyskać więcej informacji na temat specyfikatorów nadpisania, zobacz jak: zadeklarować nadpisanie specyfikatorów w macierzystych kompilacjach.
Środowisko wykonawcze systemu Windows
Aby uzyskać więcej informacji, zobacz Klasy i struktury referencyjne.
Wymagania
Opcja kompilatora: /ZW
Środowisko uruchomieniowe języka wspólnego
Wymagania
Opcja kompilatora: /clr
Przykłady
Przykład
Poniższy przykład kodu generuje błąd, ponieważ klasa X jest oznaczona jako abstract.
// abstract_keyword.cpp
// compile with: /clr
ref class X abstract {
public:
virtual void f() {}
};
int main() {
X ^ MyX = gcnew X; // C3622
}
Przykład
Poniższy przykład kodu generuje błąd, ponieważ tworzy klasę macierzystą, która jest oznaczona jako abstract.Ten błąd wystąpi z lub bez opcji kompilatora /clr.
// 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'}
Przykład
Poniższy przykład kodu generuje błąd, ponieważ funkcja f zawiera definicję, ale jest oznaczona jako abstract.Zdanie końcowe w przykładzie pokazuje, że zadeklarowanie abstrakcyjnej funkcji wirtualnej jest równoważne z zadeklarowaniem 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ż
Koncepcje
Component Extensions dla platform środowiska uruchomieniowego