abstract (C++/CLI i C++/CX)abstract (C++/CLI and C++/CX)

Abstrakcyjne słowo kluczowe deklaruje:The abstract keyword declares either:

  • Typ może być używany jako typ podstawowy, ale nie można utworzyć wystąpienia samego typu.A type can be used as a base type, but the type itself cannot be instantiated.

  • Funkcja członkowska typu może być zdefiniowana tylko w typie pochodnym.A type member function can be defined only in a derived type.

Wszystkie platformyAll Platforms

SkładniaSyntax

abstrakcyjny {} Identyfikator klasy deklaracji klasyclass-declaration class-identifier abstract {}

*virtual***Typ zwracany elementu członkowskiego-identyfikatora funkcji ()virtual return-type member-function-identifier () abstract ;

UwagiRemarks

Pierwsza Przykładowa składnia deklaruje klasę jako abstrakcyjną.The first example syntax declares a class to be abstract. Składnik deklaracji klasy może być natywną deklaracją c++ (class * * * * lub struct ) lub deklaracją rozszerzenia c++ ( Klasa ref * * lub ref struct), jeśli /ZW /clr określono opcję kompilatora lub.The class-declaration component can be either a native C++ declaration (class**** or struct), or a C++ extension declaration ( ref class** or ref struct) if the /ZW or /clr compiler option is specified.

Druga Przykładowa składnia deklaruje wirtualną funkcję członkowską, która ma być abstrakcyjna.The second example syntax declares a virtual member function to be abstract. Deklarowanie abstrakcyjnej funkcji jest takie samo jak deklarowanie jej czystej funkcji wirtualnej.Declaring a function abstract is the same as declaring it a pure virtual function. Deklarowanie funkcji członkowskiej jako abstrakcyjnej powoduje również zadeklarowanie klasy otaczającej.Declaring a member function abstract also causes the enclosing class to be declared abstract.

Abstrakcyjne słowo kluczowe jest obsługiwane w kodzie natywnym i specyficznym dla platformy; oznacza to, że można kompilować z lub bez /ZW /clr opcji kompilatora lub.The abstract keyword is supported in native and platform-specific code; that is, it can be compiled with or without the /ZW or /clr compiler option.

Można wykryć w czasie kompilacji, jeśli typ jest abstrakcyjny z __is_abstract(type) cechą typu.You can detect at compile time if a type is abstract with the __is_abstract(type) type trait. Aby uzyskać więcej informacji, zobacz Obsługa kompilatora dla cech typu.For more information, see Compiler Support for Type Traits.

Abstrakcyjne słowo kluczowe jest kontekstowym specyfikatorem przesłonięcia.The abstract keyword is a context-sensitive override specifier. Aby uzyskać więcej informacji na temat kontekstowych słów kluczowych, zobacz kontekstowe słowa kluczowe.For more information about context-sensitive keywords, see Context-Sensitive Keywords. Aby uzyskać więcej informacji na temat specyfikatorów przesłonięcia, zobacz jak: deklarowanie specyfikatorów przesłonięć w kompilacjach natywnych.For more information about override specifiers, see How to: Declare Override Specifiers in Native Compilations.

Środowisko wykonawcze systemu WindowsWindows Runtime

Aby uzyskać więcej informacji, zobacz klasy referencyjne i struktury.For more information, see Ref classes and structs.

WymaganiaRequirements

Opcja kompilatora: /ZWCompiler option: /ZW

środowiska uruchomieniowe w trakcie wykonaniaCommon Language Runtime

WymaganiaRequirements

Opcja kompilatora: /clrCompiler option: /clr

PrzykładyExamples

Poniższy przykład kodu generuje błąd, ponieważ Klasa X jest oznaczona jako abstract.The following code example generates an error because class X is marked abstract.

// 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, która jest oznaczona jako abstract.The following code example generates an error because it instantiates a native class that is marked abstract. Ten błąd wystąpi z opcją kompilatora lub bez niej /clr .This error will occur with or without the /clr compiler option.

// 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.The following code example generates an error because function f includes a definition but is marked abstract. Końcowa instrukcja w przykładzie pokazuje, że deklarowanie abstrakcyjnej funkcji wirtualnej jest równoważne do deklarowania czystej funkcji wirtualnej.The final statement in the example shows that declaring an abstract virtual function is equivalent to declaring a pure virtual function.

// abstract_keyword_3.cpp
// compile with: /clr
ref class X {
public:
   virtual void f() abstract {}   // C3634
   virtual void g() = 0 {}   // C3634
};

Zobacz teżSee also

Rozszerzenia składników dla platform .NET i platformy UWPComponent Extensions for .NET and UWP