Definición del tipo de enumeración:El tipo de enumeración (enumeration) es un tipo de datos derivado en C++, que es un conjunto de varias constantes de enumeración definidas por el usuario.

Formato de definición: El formato de definición del tipo de enumeración es:

enum <类型名> {<枚举常量表>};

Descripción del formato:

  • La palabra clave enum: indica que el identificador que le sigue es el nombre de un tipo de enumeración.
  • Tabla de constantes de enumeración: compuesta por constantes de enumeración. La "constante de enumeración", también llamada "miembro de enumeración", es una cantidad entera representada en forma de identificador que indica el valor del tipo de enumeración. La tabla de constantes de enumeración enumera todos los valores del tipo de enumeración. Las constantes de enumeración están separadas por comas y deben ser todas diferentes. El tipo de valor es el mismo que el de la expresión condicional.

Ejemplo de aplicación:

enum color_set1 {RED, BLUE, WHITE, BLACK}; // 定义枚举类型color_set1
enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; // 定义枚举类型week

Aviso importante:

Las constantes de enumeración representan los valores que pueden tomar las variables de ese tipo de enumeración. El sistema de compilación asigna un valor entero a cada constante de enumeración. De forma predeterminada, este entero es el índice del elemento enumerado, comenzando desde 0. Al definir un tipo de enumeración, se pueden asignar valores enteros a algunas o todas las constantes de enumeración. Las constantes de enumeración anteriores al valor especificado siguen tomando valores de forma predeterminada, mientras que las posteriores al valor especificado toman valores aumentando de uno en uno. Los valores de las constantes de enumeración pueden repetirse. Por ejemplo:

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.

Las constantes de enumeración solo pueden representarse en forma de identificador, no pueden ser constantes literales como enteros o caracteres. Por ejemplo, la siguiente definición es ilegal:

enum letter_set {'a','d','F','s','T'}; //枚举常量不能是字符常量
enum year_set{2000,2001,2002,2003,2004,2005}; //枚举常量不能是整型常量

Se puede cambiar a la siguiente forma para que la definición sea legal:

enum letter_set {a, d, F, s, T};
enum year_set{y2000, y2001, y2002, y2003, y2004, y2005};

Uso de variables de enumeración

El propósito principal de definir tipos de enumeración es aumentar la legibilidad del programa. Uno de los usos más comunes y significativos del tipo de enumeración es describir cantidades de estado, como se verá en el Capítulo 9, Clases de flujo de entrada/salida.

Formato de definición: Después de definir el tipo de enumeración, se pueden definir variables de ese tipo de enumeración, como:

color_set1 color1, color2;

También se puede definir el tipo y la variable al mismo tiempo (incluso se puede omitir el nombre del tipo). El formato es el siguiente:

enum {Sun,Mon,Tue,Wed,Thu,Fri,Sat} weekday1, weekday2;

Operaciones relacionadas

Los valores de las variables de enumeración solo pueden ser los valores enumerados en la tabla de constantes de enumeración, que es un subconjunto de los números enteros.

El tamaño de memoria que ocupa una variable de enumeración es el mismo que el de un número entero.

Las variables de enumeración solo pueden participar en asignaciones, operaciones relacionales y operaciones de salida. Al participar en operaciones, se usa su propio valor entero. Por ejemplo, dadas las definiciones:

enum color_set1 {RED, BLUE, WHITE, BLACK} color1, color2;
enum color_set2 { GREEN, RED, YELLOW, WHITE} color3, color4;

Entonces las operaciones de asignación permitidas son las siguientes:

color3=RED;           //将枚举常量值赋给枚举变量
color4=color3;        //相同类型的枚举变量赋值,color4的值为RED
int  i=color3;        //将枚举变量赋给整型变量,i的值为1
int  j=GREEN;         //将枚举常量赋给整型变量,j的值为0

Las operaciones relacionales permitidas son: ==, <, >, <=, >=, !=, etc. Por ejemplo:

//比较同类型枚举变量color3,color4是否相等
if (color3==color4) cout<<"相等";
//输出的是变量color3与WHITE的比较结果,结果为1
cout<< color3<WHITE;

Las variables de enumeración se pueden generar directamente; se genera el valor entero de la variable. Por ejemplo:

cout<< color3;         //输出的是color3的整数值,即RED的整数值1

Ejemplo

En una bolsa hay varias bolas de cinco colores: rojo, amarillo, azul, blanco y negro. Cada vez se extraen tres bolas de colores diferentes. Cuente y genere todas las formas de extracción.

Análisis:Dado que la bola solo puede ser uno de los cinco colores, se puede usar un tipo de enumeración para representar el color de la bola. Supongamos que las bolas extraídas son i, j, k. Según el enunciado, i, j, k pueden tener cada uno cinco valores, y i ≠ j ≠ k. Se puede usar el método de fuerza bruta para examinar cada combinación posible, encontrar las combinaciones que cumplan con los requisitos y generarlas.

Ejemplo

#include<iostream> #include<iomanip> using namespace std; int main(){ enum color_set {red,yellow,blue,white,black}; //Declara el tipo de enumeración color color_set color; int i,j,k,counter=0,loop; //counter es el contador de combinaciones de colores diferentes for(i=red;i<=black;i++) { for(j=red;j<=black;j++) { if(i!=j){ //Los colores de las dos primeras bolas son diferentes for(k=red;k<=black;k++) if(k!=i&&k!=j){ //La tercera bola es diferente de las dos primeras, cumple el requisito counter++; if((counter)%22==0){ //Muestra 22 líneas por pantalla cout<<"Presione Enter para continuar"; cin.get(); } cout<<setw(15)<<counter; /*A continuación se generan todas las formas de extracción, cada línea muestra los tres colores de una forma de extracción.*/ for(loop=1;loop<=3;loop++){ switch(loop){ case 1: color=(color_set) i; break; //El primero es i case 2: color=(color_set) j; break; //El segundo es j case 3: color=(color_set) k; break; //El tercero es k } switch(color){ case red: cout<<setw(15)<<"red"; break; case yellow:cout<<setw(15)<<"yellow";break; case blue: cout<<setw(15)<<"blue"; break; case white: cout<<setw(15)<<"white"; break; case black: cout<<setw(15)<<"black"; break; } } cout<<endl; //Salto de línea después de generar una forma de extracción } } } } cout<<"Total:"<<counter<<"formas de extracción"<<endl; return 0; }

Aviso importante

  • Las variables de enumeración se pueden generar directamente, pero no se pueden ingresar directamente. Por ejemplo: cout >> color3; //Ilegal
  • No se puede asignar directamente una constante a una variable de enumeración. Por ejemplo: color1=1; //Ilegal
  • No se pueden asignar variables de enumeración de diferentes tipos entre sí. Por ejemplo: color1=color3; //Ilegal
  • La entrada y salida de variables de enumeración generalmente usa declaraciones switch para convertirlas en caracteres o cadenas; otro procesamiento de datos de tipo enumerado también suele usar declaraciones switch para garantizar la legalidad y legibilidad del programa.