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átor třídy deklarace třídy {}
virtual
return-type member-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++ (class
nebo 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
};