abstract (C++/CLI a C++/CX)

Abstraktní klíčové slovo deklaruje jednu z těchto vlastností:

  • Typ lze použít jako základní typ, ale samotný typ nelze vytvořit instanci.

  • Členovou funkci typu lze definovat pouze v odvozeného typu.

Všechny platformy

Syntaxe

Abstraktní identifikátortřídy deklaracetřídy{}

virtualreturn-typemember-function-identifier() abstraktní ;

Poznámky

První příklad syntaxe deklaruje třídu, která má být abstraktní. Komponenta deklarace třídy může být buď nativní deklarací jazyka C++ (classnebo struct), nebo deklarací rozšíření jazyka C++ (ref class nebo refstruct), pokud je zadána možnost nebo /clr možnost kompilátoru/ZW.

Druhá ukázková syntaxe deklaruje abstraktní virtuální členovou funkci. Deklarace abstraktní funkce je stejná jako deklarování čistě virtuální funkce. Deklarace abstraktní členské funkce také způsobí, že nadřazená třída bude deklarována abstraktní.

Abstraktní klíčové slovo je podporováno v nativním kódu a kódu specifickém pro platformu. To znamená, že je možné ho /ZW zkompilovat pomocí možnosti nebo bez ní nebo /clr bez ní.

V době kompilace můžete zjistit, jestli je typ abstraktní s __is_abstract(type) vlastností typu. Další informace naleznete v tématu Podpora kompilátoru pro vlastnosti typu.

Abstraktní klíčové slovo je specifikátor přepsání citlivý na kontext. Další informace o klíčových slovech citlivých na kontext naleznete v tématu Klíčová slova citlivá na kontext. Další informace o specifikátorech přepsání naleznete v tématu Postupy: Deklarace specifikátorů přepsání v nativních kompilacích.

prostředí Windows Runtime

Další informace naleznete v tématu Ref třídy a struktury.

Požadavky

Možnost kompilátoru: /ZW

CLR (Common Language Runtime)

Požadavky

Možnost kompilátoru: /clr

Příklady

Následující příklad kódu vygeneruje chybu, protože třída X je označena abstraktní.

// abstract_keyword.cpp
// compile with: /clr
ref class X abstract {
public:
   virtual void f() {}
};

int main() {
   X ^ MyX = gcnew X;   // C3622
}

Následující příklad kódu vygeneruje chybu, protože vytvoří instanci nativní třídy, která je označena abstraktní. K této chybě dojde s možností kompilátoru nebo bez této /clr možnosti.

// 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'}

Následující příklad kódu vygeneruje chybu, protože funkce f obsahuje definici, ale je označena jako abstraktní. Poslední příkaz v příkladu ukazuje, že deklarace abstraktní virtuální funkce je ekvivalentní deklarování čisté virtuální funkce.

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

Viz také

Přípony komponent pro .NET a UPW