logo

Clases Enum en C++ y su ventaja sobre Enum DataType

Enums o tipo enumerado (enumeración) es un tipo de datos definido por el usuario al que se le pueden asignar algunos valores limitados. Estos valores los define el programador al momento de declarar el tipo enumerado.

Necesidad de clase Enum sobre tipo Enum:
A continuación se detallan algunas de las razones sobre cuáles son las limitaciones de Enum Type y por qué necesitamos Enum Class para cubrirlas.



1.Enum es una colección de constantes enteras con nombre, lo que significa que cada elemento se asigna por un valor entero. 2.Se declara con la palabra clave enum.

C++








#include> using> namespace> std;> enum> roll_no {> >satya = 70,> >aakanskah = 73,> >sanket = 31,> >aniket = 05,> >avinash = 68,> >shreya = 47,> >nikita = 69,> };> int> main()> {> >enum> roll_no obj;> >obj = avinash;> >cout <<>'The roll no of avinash='> << obj;> }>

>

>

componentes del robot
Producción

The roll no of avinash=68>

Dos enumeraciones no pueden compartir los mismos nombres:

CPP




#include> using> namespace> std;> int> main()> {> >// Defining enum1 Gender> >enum> Gender { Male,> >Female };> >// Defining enum2 Gender2 with same values> >// This will throw error> >enum> Gender2 { Male,> >Female };> >// Creating Gender type variable> >Gender gender = Male;> >Gender2 gender2 = Female;> >cout << gender << endl> ><< gender2;> >return> 0;> }>

látex de tamaño de texto
>

>

Error de compilación:

prog.cpp:13:20: error: redeclaration of 'Male' enum Gender2 { Male, ^ prog.cpp:8:19: note: previous declaration 'main()::Gender Male' enum Gender { Male, ^ prog.cpp:14:20: error: redeclaration of 'Female' Female }; ^ prog.cpp:9:19: note: previous declaration 'main()::Gender Female' Female }; ^ prog.cpp:18:23: error: cannot convert 'main()::Gender' to 'main()::Gender2' in initialization Gender2 gender2 = Female; ^>

Ninguna variable puede tener un nombre que ya esté en alguna enumeración:

CPP




#include> using> namespace> std;> int> main()> {> >// Defining enum1 Gender> >enum> Gender { Male,> >Female };> >// Creating Gender type variable> >Gender gender = Male;> >// creating a variable Male> >// this will throw error> >int> Male = 10;> >cout << gender << endl;> >return> 0;> }>

>

>

Error de compilación:

prog.cpp: In function 'int main()': prog.cpp:16:9: error: 'int Male' redeclared as different kind of symbol int Male = 10; ^ prog.cpp:8:19: note: previous declaration 'main()::Gender Male' enum Gender { Male, ^>

Las enumeraciones no son tipo seguro :

CPP




botón para centrar css

#include> using> namespace> std;> int> main()> {> >// Defining enum1 Gender> >enum> Gender { Male,> >Female };> >// Defining enum2 Color> >enum> Color { Red,> >Green };> >// Creating Gender type variable> >Gender gender = Male;> >Color color = Red;> >// Upon comparing gender and color> >// it will return true as both have value 0> >// which should not be the case actually> >if> (gender == color)> >cout <<>'Equal'>;> >return> 0;> }>

>

algoritmos de búsqueda binaria
>

Advertencia:

prog.cpp: In function 'int main()': prog.cpp:23:19: warning: comparison between 'enum main()::Gender' and 'enum main()::Color' [-Wenum-compare] if (gender == color) ^>

Clase de enumeración

C ++ 11 ha introducido clases de enumeración (también llamadas enumeraciones con alcance ), que hace que las enumeraciones sean tanto fuertemente tipado y fuertemente delimitado . La enumeración de clase no permite la conversión implícita a int y tampoco compara enumeradores de diferentes enumeraciones.
Para definir la clase enum usamos la palabra clave class después de la palabra clave enum.
Sintaxis:

// Declaration enum class EnumName{ Value1, Value2, ... ValueN}; // Initialisation EnumName ObjectName = EnumName::Value;>

Ejemplo:

// Declaration enum class Color{ Red, Green, Blue}; // Initialisation Color col = Color::Red;>

A continuación se muestra una implementación para mostrar la clase Enum

CPP




// C++ program to demonstrate working> // of Enum Classes> #include> using> namespace> std;> int> main()> {> >enum> class> Color { Red,> >Green,> >Blue };> >enum> class> Color2 { Red,> >Black,> >White };> >enum> class> People { Good,> >Bad };> >// An enum value can now be used> >// to create variables> >int> Green = 10;> >// Instantiating the Enum Class> >Color x = Color::Green;> >// Comparison now is completely type-safe> >if> (x == Color::Red)> >cout <<>'It's Red '>;> >else> >cout <<>'It's not Red '>;> >People p = People::Good;> >if> (p == People::Bad)> >cout <<>'Bad people '>;> >else> >cout <<>'Good people '>;> >// gives an error> >// if(x == p)> >// cout<<'red is equal to good';> >// won't work as there is no> >// implicit conversion to int> >// cout<< x;> >cout <<>int>(x);> >return> 0;> }>

>

>

Producción

It's not Red Good people 1>

Los tipos enumerados declarados como clase enum también tienen más control sobre su tipo subyacente; puede ser cualquier tipo de datos integral, como char, short o unsigned int, que esencialmente sirve para determinar el tamaño del tipo.

Esto se especifica mediante dos puntos y el tipo subyacente después del tipo enumerado:

eg: enum class eyecolor : char {char,green,blue}; Here eyecolor is a distinct type with the same size as a char (1 byte).>

C++

cadena n java




#include> using> namespace> std;> enum> rainbow{> >violet,> >indigo,> >blue,> >green,yellow,orange,red> }colors;> enum> class> eyecolor:>char>{> >blue,green,brown> }eye;> int> main() {> >cout<<>'size of enum rainbow variable: '><<>sizeof>(colors)< cout<<'size of enum class eyecolor variable:'<

>

>

Producción

size of enum rainbow variable: 4 size of enum class eyecolor variable:1>

Referencia: https://en.cppreference.com/w/cpp/language/enum