Udostępnij za pośrednictwem


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{}

virtualzwracany 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