Définition du type d'énumération :Le type d'énumération (énumération) est un type de données dérivé en C++, qui est un ensemble de plusieurs constantes d'énumération définies par l'utilisateur.
Format de définition : Le format de définition du type d'énumération est :
enum <类型名> {<枚举常量表>};
Description du format :
- Le mot-clé enum — indique que l'identifiant qui le suit est le nom d'un type d'énumération.
- Table des constantes d'énumération — composée de constantes d'énumération. Les "constantes d'énumération" ou "membres d'énumération" sont des quantités entières exprimées sous forme d'identifiants, représentant les valeurs du type d'énumération. La table des constantes d'énumération liste toutes les valeurs du type d'énumération. Les constantes d'énumération sont séparées par des virgules et doivent être différentes les unes des autres. Le type de valeur est le même que celui d'une expression conditionnelle.
Exemples d'application :
enum color_set1 {RED, BLUE, WHITE, BLACK}; // 定义枚举类型color_set1
enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; // 定义枚举类型week
Remarques importantes :
Les constantes d'énumération représentent les valeurs possibles que peuvent prendre les variables de ce type d'énumération. Le système de compilation attribue une valeur entière à chaque constante d'énumération. Par défaut, cet entier est le numéro d'ordre de l'élément listé, en commençant à 0. Des valeurs entières peuvent être spécifiées pour certaines ou toutes les constantes d'énumération lors de la définition du type d'énumération. Les constantes d'énumération avant la valeur spécifiée prennent encore des valeurs de manière par défaut, tandis que les constantes d'énumération après la valeur spécifiée prennent des valeurs selon le principe d'incrémentation de 1 en séquence. Les valeurs des constantes d'énumération peuvent être répétées. Par exemple :
enum fruit_set {apple, orange, banana=1, peach, grape}
//枚举常量apple=0,orange=1, banana=1,peach=2,grape=3.
enum week {Sun=7, Mon=1, Tue, Wed, Thu, Fri, Sat};
//枚举常量Sun,Mon,Tue,Wed,Thu,Fri,Sat的值分别为7、1、2、3、4、5、6.
Les constantes d'énumération ne peuvent être représentées que par des identificateurs, et non par des constantes littérales telles que celles des types entier ou caractère. Par exemple, la définition suivante est illégale :
enum letter_set {'a','d','F','s','T'}; //枚举常量不能是字符常量
enum year_set{2000,2001,2002,2003,2004,2005}; //枚举常量不能是整型常量
Elle peut être modifiée sous la forme suivante, et la définition devient légale :
enum letter_set {a, d, F, s, T};
enum year_set{y2000, y2001, y2002, y2003, y2004, y2005};
Utilisation des variables d'énumération
L'objectif principal de la définition de types d'énumération est d'améliorer la lisibilité du programme. L'une des utilisations les plus courantes et les plus pertinentes des types d'énumération est de décrire des états, ce que nous verrons au chapitre 9, Classes de flux d'entrée/sortie.
Format de définition : après avoir défini un type d'énumération, on peut définir des variables de ce type d'énumération, par exemple :
color_set1 color1, color2;
Le type et les variables peuvent également être définis simultanément (même le nom du type peut être omis), avec le format suivant :
enum {Sun,Mon,Tue,Wed,Thu,Fri,Sat} weekday1, weekday2;
Opérations associées
Les valeurs des variables d'énumération ne peuvent être que les valeurs listées dans la table des constantes d'énumération, qui est un sous-ensemble des entiers.
Les variables d'énumération occupent la même taille mémoire que les entiers.
Les variables d'énumération ne peuvent participer qu'à des affectations, des opérations relationnelles et des opérations de sortie. Lorsqu'elles participent à des opérations, leurs propres valeurs entières sont utilisées. Par exemple, étant donné la définition :
enum color_set1 {RED, BLUE, WHITE, BLACK} color1, color2;
enum color_set2 { GREEN, RED, YELLOW, WHITE} color3, color4;
Alors les opérations d'affectation autorisées sont les suivantes :
color3=RED; //将枚举常量值赋给枚举变量 color4=color3; //相同类型的枚举变量赋值,color4的值为RED int i=color3; //将枚举变量赋给整型变量,i的值为1 int j=GREEN; //将枚举常量赋给整型变量,j的值为0
Les opérations relationnelles autorisées sont : ==, <, >, <=, >=, !=, etc., par exemple :
//比较同类型枚举变量color3,color4是否相等 if (color3==color4) cout<<"相等"; //输出的是变量color3与WHITE的比较结果,结果为1 cout<< color3<WHITE;
Les variables d'énumération peuvent être affichées directement, et ce qui est affiché est la valeur entière de la variable. Par exemple :
cout<< color3; //输出的是color3的整数值,即RED的整数值1
Exemple
Une poche contient plusieurs boules de cinq couleurs : red, yellow, blue, white et black. À chaque fois, trois boules de couleurs différentes sont tirées de la poche. Comptez et affichez toutes les façons possibles.
Analyse :Comme une boule ne peut être que l'une des cinq couleurs, on peut utiliser un type d'énumération pour représenter la couleur de la boule. Supposons que les boules tirées soient i, j et k. D'après l'énoncé du problème, i, j et k peuvent chacun avoir cinq valeurs possibles, et i≠j≠k. La méthode exhaustive peut être utilisée pour vérifier une à une chaque combinaison possible, trouver les combinaisons qui répondent aux exigences et les afficher.
Exemple
Remarques importantes
- Les variables d'énumération peuvent être affichées directement, mais ne peuvent pas être saisies directement. Par exemple : cout >> color3; //illégal
- On ne peut pas affecter directement une constante à une variable d'énumération. Par exemple : color1=1; //illégal
- Les variables d'énumération de types différents ne peuvent pas être affectées l'une à l'autre. Par exemple : color1=color3; //illégal
- L'entrée et la sortie des variables d'énumération utilisent généralement des instructions switch pour les convertir en caractères ou en chaînes de caractères ; les autres traitements des données de type énumération appliquent aussi souvent des instructions switch afin de garantir la légalité et la lisibilité du programme.