Udostępnij za pośrednictwem


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