Sdílet prostřednictvím


abstract (rozšíření komponent C++)

Klíčové slovo abstract deklaruje, že:

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

  • Členská funkce typu může být definována pouze v odvozeném typu.

Všechny platformy

Syntaxe

class-declaration class-identifier abstract {}
virtual return-type member-function-identifier() abstract ;

Poznámky

První ukázková syntaxe deklaruje třídu jako abstraktní.Komponenta class-declaration může být buď nativní deklarace jazyka C++ (klíčové slovo class nebo struct), nebo deklarace rozšíření v jazyce C++ (klíčové slovo ref class nebo ref struct), je-li zadána možnost kompilátoru /ZW nebo /clr.

Druhý příklad syntaxe deklaruje virtuální členskou funkci jako abstraktní.Deklarace funkce jako abstraktní je totéž jako deklarace funkce jako čistě virtuální.Je-li členská funkce deklarována jako abstraktní, bude jako abstraktní deklarována také ohraničující třída.

Klíčové slovo abstract je podporováno v nativním kódu a kódu specifickém pro platformu, tj. lze jej kompilovat s možnostmi kompilátoru /ZW nebo /clr i bez nich.

Pomocí funkce __is_abstract(type) lze zjistit, zda je typ abstraktní, v době kompilace.Další informace naleznete v tématu Podpora kompilátoru pro typové vlastnosti (C++ Component Extensions).

Klíčové slovo abstract je specifikátor přepsání citlivý na kontext.Další informace o kontextově citlivých klíčových slovech naleznete v tématu Kontextově závislá klíčová slova (rozšíření komponent C++).Další informace o specifikátorech přepsání naleznete v tématu týkajícím se deklarace specifikátorů přepsání v nativních kompilacích.

prostředí Windows Runtime

Další informace naleznete v tématu týkajícím se tříd a struktur ref.

Požadavky

Možnost kompilátoru: /ZW

Common Language Runtime

Požadavky

Možnost kompilátoru: /clr

Příklady

Příklad

Následující příklad generuje chybu, protože třída X je označena klíčovým slovem abstract.

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

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

Příklad

Následující příklad generuje chybu, protože tvoří instanci nativní třídy označené klíčovým slovem abstract.K této chybě dojde bez ohledu na použití možnosti kompilátoru /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'}

Příklad

Následující příklad generuje chybu, protože funkce f obsahuje definici, ale je označena klíčovým slovem abstract.Poslední příkaz v příkladu ukazuje, že deklarace abstraktní virtuální funkce je ekvivalentní k deklaraci č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é

Koncepty

Rozšíření komponent pro platformy běhového prostředí