Enumeradores en C++

Spread the love
  •  
  •  
  •  
  •   
  •  
  •  
  •  
  •  
  •  

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://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++

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

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://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

Ethical hack


Fuente Imágenes:

Referencias:

Código Fuente:

Código fuente general del Tutorial: en Github

El de ésta página:
cpp_43_enum01.cpp
cpp_44_enum02.cpp

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

Spread the love
  •  
  •  
  •  
  •   
  •  
  •  
  •  
  •  
  •  

Deja una respuesta