Partager via


abstract (extensions du composant C++)

Le mot clé abstract déclare l'un ou l'autre :

  • 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 return-type member-function-identifier() abstract ;

Remarques

Le premier exemple de syntaxe déclare une classe comme abstraite.Le composant de déclaration de classe peut être une déclaration C++ natif (class ou struct) ou une déclaration d'extension C++ (ref class ou ref struct) si l'option du compilateur /ZW ou /clr est spécifiée.

Le deuxième exemple de syntaxe déclare une fonction membre virtuelle comme abstraite.Déclarer une fonction abstraite revient à déclarer une fonction virtuelle pure.Déclarer une fonction membre 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 Prise en charge du compilateur pour les Type Traits (extensions du composant C++).

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 (extensions du composant C++).Pour plus d'informations sur les spécificateurs de substitution, consultez Comment : déclarer les spécificateurs de substitution dans les compilations natives.

Windows Runtime

Pour plus d'informations, consultez Classes et structures de référence.

b0z6b513.collapse_all(fr-fr,VS.110).gifConfiguration requise

Option du compilateur : /ZW

Common Language Runtime

b0z6b513.collapse_all(fr-fr,VS.110).gifConfiguration requise

Option du compilateur : /clr

b0z6b513.collapse_all(fr-fr,VS.110).gifExemples

Exemple

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
}

Exemple

L'exemple de code suivant génère une erreur parce qu'il instancie une classe native qui est 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'}

Exemple

L'exemple de code suivant génère une erreur parce que la fonction f inclut une définition mais est marquée comme abstract.L'instruction finale de l'exemple montre que la déclaration d'une fonction virtuelle abstraite est équivalente à 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
};

Voir aussi

Concepts

Extensions de composant pour les plateformes Runtime