Python

Enumeradores en C++

Enumeradores en C++

El concepto de conjunto se encuentra ampliamente difundido en nuestro entorno. Con regularidad utilizamos este concepto en múltiples actividades que van desde los días de la semana, los colores, grupos de animales, materias, etcétera.

El lenguaje C++ implementa una estructura para implementar conjuntos con el fin de representar los conjuntos del mundo real para poder realizar operaciones sobre ellos Además nos provee algunas herramientas para poder manipularlos y lo que pueda faltar… lo podemos programar.

Recordemos que un conjunto es un grupo de elementos (ítems) que tienen características similares y que se diferencian entre sí por alguna propiedad que nos interesa y qué cambia en cada uno de los elementos que forman parte de dicho conjunto, por ejemplo los días de la semana, los meses del año o los elementos de un grupo escolar.

En lenguaje C++ utilizamos la palabra reservada enum para definir grupos de elementos comunes (conjuntos).

Enumerador (enum)

Un tipo de datos enumerado es una manera de asociar nombres a números, y por consiguiente de ofrecer más significado a alguien que lea el código, es un tipo definido por el usuario y consiste en un conjunto de nombres constantes llamados enumeradores. Un tipo de datos enumerado es útil cuando se quiere poder seguir la pista de alguna característica. (1)(2)

Sintaxis de enum

// enum sin alcance:
enum identificador: tipo {lista-enumerada};
// enum con alcance:
enum [class|struct] identificador: tipo {lista-enumerada};
en donde,
  • enum, palabra reservada que da inicio a una estructura enumerada.
  • identificador, nombre con el que se hará referencia a la estructura enumerada.
  • tipo, el tipo de dato que tendrán los enumeradores
  • {lista-enumerada}; lista de los enumeradores, debe terminar con punto y coma (;)
  • [class|struct] define un enumerador como clase o estructura, lo que requiere el indicador de ámbito para acceder a los elementos. Revisaremos esto nuevamente una vez revisemos el concepto de objetos y clases.

Ejemplos de la estructura enum

Como siempre, la mejor forma de comprender el uso de la estructura enum, es con ejemplos.

// cpp_43_enum01.cpp
// Este programa forma parte del tutorial de introducción al lenguaje C++
// http://a.ehack.info/leguaje-c-introduccion/
// Se ilustra la decalaración de tipos enumerados
// 2018, Por http://about.me/carlosgbr
// Versión 1
// Compilado en https://www.onlinegdb.com/online_c++_compiler
#include <iostream>
using namespace std;
int main()
{
enum TipoFigura {Cuadro, Triangulo, Circulo};
TipoFigura Figura; //Definimos Figura de tipo enumerado TipoFigura
Figura = Circulo;
switch (Figura) {
    case Cuadro: cout << "Actividades para Cuadros"; break;
    case Triangulo: cout << "Actividades para Triángulo"; break;
    case Circulo: cout << "Actividades para Círculo"; break;
    default: cout << "Función no implementada"; break;
}
    //Revisamos el valor predeterminado que asigna el compilador a los enumeradores
    cout << endl<< endl << "Valor de Cuadro: " << Cuadro << endl;
    cout << "Valor de Triangulo: " << Triangulo << endl;
    cout << "Valor de Circulo: " << Circulo << endl;
return 0;
}

Podrás notar que no declaramos el tipo de “TipoFigura”, de forma predeterminada los tipos enumerados son enteros, por eso los podemos utilizar directamente en la estructura switch, además los podemos utilizar en ciclos for y en general, del mismo modo que usaríamos una variable entera.

Ejemplo de enumeradores en C++

El programa también nos muestra que los enumeradores reciben un valor predeterminado por el compilador, asignando al primero siempre el valor igual a 0. Sin embargo tú puedes cambiar el valor que requieras. Por ejemplo:

enum TipoEleccion {Piedra = 1, Tijeras = 5, Papel = 10};

Si asignamos un valor a un enumerador y a los demás no, a los siguientes enumeradores se les asignará valor de forma consecutiva. Como ya se mencionó, si no asignas al primer enumerador este tendrá un valor de 0, independientemente del valor del siguiente elemento.

Ejemplo de salida enumerada

Por qué usar enum

Probablemente te parezca un poco extraña la existencia de las estructuras enumeradas. A su favor te puedo comentar que permiten crear programas más elegantes y simplificados, como menciona por ejemplo intenta programar el siguiente programa sin el uso de una estructura enumerada. Después imagina un simulador lleno de 0’s y 1’s en lugar de “Encendido” y “Apagado”, la ventaja es evidente.

// cpp_44_enum02.cpp
// Este programa forma parte del tutorial de introducción al lenguaje C++
// http://a.ehack.info/leguaje-c-introduccion/
// Se ilustra la decalaración de tipos enumerados y su asignación de valores
// 2018, Por http://about.me/carlosgbr
// Versión 1
// Compilado en https://www.onlinegdb.com/online_c++_compiler
#include <iostream>
using namespace std;
int main()
{
enum TipoEleccion {Piedra, Tijeras = 5, Papel};
TipoEleccion Eleccion; //Definimos Figura de tipo enumerado TipoEleccion
    //Revisamos el valor predeterminado que asigna el compilador a los enumeradores
    cout << endl<< endl << "Valor de Piedra: " << Piedra << endl;
    cout << "Valor de Tijeras: " << Tijeras << endl;
    cout << "Valor de Papel: " << Papel << endl;
return 0;
}

Conclusión

Varios autores han referido que la potencia de un lenguaje está en función de su capacidad de crear y utilizar estructuras de datos, C++ ofrece una extensa gama de mecanismos para esto. Los tipos enumerados son uno de los más sencillos, seguiremos explorando otras estructuras en los siguientes capítulos.


Ethical Hack

Referencias

Fuente Imágenes

Código Fuente


Enumeradores en C++ by Roberto C. González is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.
eHack Blog

Entradas recientes

dnsenum

El comando dnsenum es una herramienta de línea de comandos para realizar enumeración de DNS…

1 año hace

Las 24 listas negras de IPv4 más comunes.

En esta entrada te presento 24 de las listas negras más comunes que los servidores…

2 años hace

ZoomIt – SysInternals

ZoomIt es una herramienta de anotación y zoom de pantalla para presentaciones técnicas que incluyen…

2 años hace

WinObj – SysInternals

WinObj es el visor de espacios de nombres de Object Manager definitivo. Es la primera…

2 años hace

WhoIs – SysInternals

Whois realiza el registro de registro para el nombre de dominio o la dirección IP…

2 años hace

VolumeID – SysInternals

VolumeID – Esta utilidad, le permite cambiar los identificadores de los discos FAT y NTFS…

2 años hace