IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Langage > Types de données
        Quand et comment utiliser les énumérations ?
4.1.1. Nombres (8)
                Comment convertir un entier (int) en chaîne (AnsiString) ?
                Comment changer le caractère décimal par défaut ?
                Comment utiliser des grands nombres ?
                Comment obtenir un entier à partir d'un réel ?
                Comment formater l'affichage d'un réel ?
                Comment arrondir un réel ?
                Comment obtenir la valeur décimale d'un entier à partir d'une représentation hexadécimale ?
                Comment afficher un nombre / hexadecimal en 'chaîne de bits'
4.1.2. Chaînes de caractères (14)
                Comment insérer des guillemets dans une chaîne ?
                Comment faire pour convertir une chaîne en majuscules ?
                Comment faire pour convertir une chaîne en minuscules ?
                Comment convertir une chaîne AnsiString en une chaîne C, tableau de caractères à zéro terminal ?
                Comment transformer une chaîne DOS en chaîne Windows ?
                Comment convertir une chaîne (AnsiString) en entier (int) ?
                Comment charger le contenu d'un fichier texte ?
                Comment obtenir la représentation hexadécimale d'une AnsiString ?
                Comment obtenir une AnsiString à partir de sa représentation hexadécimale ?
                Comment connaître la longueur d'une chaîne de caractères ?
                Comment accéder à un caractère d'une chaîne en connaissant sa position ?
                Comment déterminer la position d'une occurrence à l'intérieur d'une chaîne ?
                Comment remplacer une occurrence dans une chaîne par une autre valeur ?
                Comment faire un switch avec des AnsiString ?



Quand et comment utiliser les énumérations ?
Créé le 01/09/2004[haut]
auteur : Geronimo
Si vous écrivez une méthode qui compare une valeur avec différentes constantes, évitez de comparer directement avec des constantes littérales, mais utilisez des énumérations.

void GestionErreur(int error)
{
    switch(error)
    {
    case 0: cerr << "Erreur de syntaxe\n"; 
            break;
    case 1: cerr << "Erreur : tentative de division par zéro\n";
            break;
    case 2: cerr << "Erreur fatale. Le programme se termine.\n";
            exit(1);
            break;
    default:cerr << "Erreur inconnue."
            break;
    }
}
Dans cet exemple, la variable entière error est directement comparée à des constantes : 0, 1, 2... Définissez plutôt des constantes à l'aide d'une énumération, ce qui permet de bien visualiser à quoi correspondent ces constantes, et d'être sûr de ne pas intervertir les traitements dépendant de celles-ci :

enum Erreur {SYNTAX_ERROR, DIVISION_0_ERROR, FATAL_ERROR};
//...
void GestionErreur(Erreur error)
{
      switch(error)
      {
      case SYNTAX_ERROR:    cerr << "Erreur de syntaxe\n"; 
                            break;

      case DIVISION_0_ERROR:cerr << "Erreur : tentative de division par zéro\n";
                            break;

      case FATAL_ERROR:     cerr << "Erreur fatale. Le programme se termine.\n";
                            exit(1);
                            break;

      default:    cerr << "Erreur inconnue."
                            break;
      }
}  
En voyant ce code, vous n'avez pas besoin de vous demander à quelle erreur correspond telle constante puisque vous n'avez pas à connaître les valeurs des constantes (théoriquement, on a SYNTAX_ERROR = 0, DIVISION_0_ERROR = 1 et FATAL_ERROR = 2). Si vous souhaitiez définir les valeurs des constantes, initialisez-les dans l'énumération :

enum Erreur {SYNTAX_ERROR = 11 , 
             DIVISION_0_ERROR = 12, 
             FATAL_ERROR = 13};
La méthode de gestion des erreurs étant écrite, pour l'appeller, il suffit de passer l'une des constantes en argument :

//...
int a, b;
cout << "Entrez deux nombres :\n";
cin >> a >> b;

if (b)// Le diviseur n'est pas nul
     cout << double(a)/double(b);
else    // Le diviseur est nul
     GestionErreur(DIVISION_0_ERROR);
//...


Consultez les autres F.A.Q.


Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.