résumé (C++/CLI et C++/CX)
Le mot clé abstract peut déclarer :
Un type peut être utilisé comme type de base, mais le type lui-même ne peut pas être instancié.
Une fonction membre de type peut être définie uniquement dans un type dérivé.
Toutes les plateformes
Syntaxe
class-declaration class-identifier abstract {}
virtual
type de retourmember-function-identifier () abstract ;
Notes
Le premier exemple de syntaxe déclare une classe comme étant abstraite. Le composant de déclaration de classe peut être une déclaration C++ native (class
oustruct
) ou une déclaration d’extension C++ (classe ref ou struct ref) si l’option ou /clr
l’option /ZW
du compilateur est spécifiée.
Le deuxième exemple de syntaxe déclare une fonction membre virtuelle comme étant abstraite. La déclaration d'une fonction comme étant abstraite revient à déclarer qu'il s'agit d'une fonction virtuelle pure. La déclaration d'une fonction membre comme étant abstraite entraîne également la déclaration de la classe englobante comme étant abstraite.
Le mot clé abstract est pris en charge dans le code natif et spécifique à la plateforme ; autrement dit, il peut être compilé avec ou sans l’option du compilateur /ZW
ou /clr
.
Vous pouvez détecter, au moment de la compilation, si un type est abstrait avec le trait de type __is_abstract(type)
. Pour plus d’informations, consultez Compiler Support for Type Traits (Prise en charge du compilateur pour les caractéristiques de type).
Le mot clé abstract est un spécificateur de substitution contextuel. Pour plus d’informations sur les mots clés contextuels, consultez Mots clés contextuels. Pour plus d’informations sur les spécificateurs de remplacement, consultez Guide pratique pour déclarer des spécificateurs de remplacement dans les compilations natives.
Windows Runtime
Pour plus d’informations, consultez Classes et structures de référence.
Spécifications
Option du compilateur : /ZW
Common Language Runtime
Spécifications
Option du compilateur : /clr
Exemples
L’exemple de code suivant génère une erreur car la classe X
est marquée comme abstract.
// abstract_keyword.cpp
// compile with: /clr
ref class X abstract {
public:
virtual void f() {}
};
int main() {
X ^ MyX = gcnew X; // C3622
}
L’exemple de code suivant génère une erreur car il instancie une classe native marquée comme abstract. Cette erreur se produit avec ou sans l'option du compilateur /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'}
L’exemple de code suivant génère une erreur car la fonction f
inclut une définition, mais elle est marquée comme abstract. La dernière instruction de l'exemple montre que la déclaration d'une fonction virtuelle abstraite équivaut à la déclaration d'une fonction virtuelle pure.
// abstract_keyword_3.cpp
// compile with: /clr
ref class X {
public:
virtual void f() abstract {} // C3634
virtual void g() = 0 {} // C3634
};