En C++ una enumeración (o enum) es una forma de definir un conjunto de valores enteros nombrados bajo un mismo tipo.
Cada miembro de una enumeración es una constante que representa un valor entero único (comenzando por 0 por defecto y aumentando en uno para cada miembro subsecuente)-
Las enumeraciones facilitan la lectura y el mantenimiento del código al reemplazar números mágicos con nombres descriptivos.
Si quieres aprender más sobre Enumeraciones
consulta el Curso de Introducción a la Programación leer más
Definición de una Enumeración
Para definir una enumeración en C++, se utiliza la palabra clave enum, seguida del nombre de la enumeración y los miembros entre llaves.
enum DiasDeLaSemana
{
Lunes,
Martes,
Miércoles,
Jueves,
Viernes,
Sábado,
Domingo
};
En este ejemplo,
DiasDeLaSemanaes una enumeración con siete miembros:Lunes,Martes,Miércoles,Jueves,Viernes,SábadoyDomingo.- Por defecto,
Lunestiene el valor 0,Martestiene el valor 1 (y así sucesivamente)
Enumeraciones con valores específicos
Es posible asignar valores específicos a los miembros de una enumeración (en lugar de utilizar los valores predeterminados).
enum DiasSemana
{
Lunes = 1,
Martes = 2,
Miércoles = 3,
Jueves = 4,
Viernes = 5,
Sábado = 6,
Domingo = 7
};
Si los números son correlativos, puedes numerar únicamente el primero de ellos (el resto serán asignados automáticamente en forma secuencial).
enum DiasSemana
{
Lunes = 1,
Martes,
Miércoles,
Jueves,
Viernes,
Sábado,
Domingo
};
Uso de las enumeraciones
Asignación de valores
Una vez definida una enumeración, puedes asignar valores a variables del tipo de la enumeración:
DiasDeLaSemana hoy = Lunes;
Comparación de valores
También puedes comparar estos valores utilizando operadores de igualdad:
if (hoy == Lunes)
{
std::cout << "Hoy es lunes." << std::endl;
}
Conversión de enumeraciones
Las enumeraciones en C++ se basan en tipos de datos enteros. Por lo que es posible convertir entre una enumeración y su tipo subyacente (que por defecto es int).
Puedes convertir un valor de enumeración a su representación entera de la siguiente manera:
int valorNumerico = static_cast<int>(Miércoles);
std::cout << valorNumerico << std::endl; // Salida: 2
También puedes convertir un entero a una enumeración, siempre y cuando el valor sea válido para la enumeración:
DiasDeLaSemana dia = static_cast<DiasDeLaSemana>(4);
std::cout << dia << std::endl; // Salida: 4 (dependiendo de la implementación, podría necesitar un cast adicional para imprimir el nombre)
Enumeraciones enumeradas
Las enumeraciones enumeradas (enum class o enum struct) son una forma más segura de definir enumeraciones en C++, ya que los valores de una enumeración enumerada no se convierten implícitamente a enteros y no entran en el ámbito global.
La sitaxis para crear una enumeración enumerada
enum class NombreEnum : tipo_base {
Valor1,
Valor2,
// Más valores
};
Por ejemplo,
enum class Color : char {
Rojo,
Verde,
Azul
};
Color c = Color::Rojo;
En este ejemplo,
Colores una enumeración enumerada con los valoresRojo,VerdeyAzul- Cada valor está asociado a un tipo
char.
Ejemplos prácticos
Uso en una aplicación de tareas
Supongamos que estamos desarrollando una aplicación para gestionar tareas y queremos utilizar enumeraciones para representar el estado de una tarea:
enum EstadoTarea
{
Pendiente,
EnProgreso,
Completada,
Cancelada
};
class Tarea
{
public:
std::string Nombre;
EstadoTarea Estado;
void mostrarEstado()
{
std::cout << "La tarea '" << Nombre << "' está en estado: " << Estado << std::endl;
}
};
int main()
{
Tarea tarea;
tarea.Nombre = "Estudiar para el examen";
tarea.Estado = EnProgreso;
tarea.mostrarEstado(); // Salida: La tarea 'Estudiar para el examen' está en estado: 1
return 0;
}
Uso en un juego
En el desarrollo de juegos, las enumeraciones pueden ser útiles para representar diferentes tipos de enemigos o estados del juego:
enum TipoDeEnemigo
{
Goblin,
Orco,
Dragon
};
class Enemigo
{
public:
TipoDeEnemigo Tipo;
void mostrarTipo()
{
std::cout << "Este enemigo es un: " << Tipo << std::endl;
}
};
int main()
{
Enemigo enemigo;
enemigo.Tipo = Dragon;
enemigo.mostrarTipo(); // Salida: Este enemigo es un: 2
return 0;
}