logo

Classes Enum en C++ i els seus avantatges sobre Enum DataType

Enumeració o tipus enumerat (enumeració) és un tipus de dades definit per l'usuari al qual es poden assignar alguns valors limitats. Aquests valors els defineix el programador en el moment de declarar el tipus enumerat.

Necessitat d'una classe d'enumeració sobre el tipus d'enumeració:
A continuació es mostren algunes de les raons de quines són les limitacions del tipus Enum i per què necessitem la classe Enum per cobrir-les.



1.Enum és una col·lecció de constants enters anomenades significa que cada element està assignat per un valor enter. 2.Es declara amb la paraula clau 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;> }>

>

>

cadena java a json
Sortida

The roll no of avinash=68>

Dos enumeracions no poden compartir els mateixos noms:

CPP




t xancleta

#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;> }>

>

>

Error de compilació:

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; ^>

Cap variable pot tenir un nom que ja estigui en alguna enumeració:

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

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, ^>

Les enumeracions no ho són segur de tipus :

CPP

cout




#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;> }>

>

>

Avís:

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) ^>

Classe Enum

C++11 ha introduït classes d'enumeració (també anomenades enumeracions amb abast ), que fa enumeracions ambdues fortament mecanografiat i fort abast . La classe enum no permet la conversió implícita a int i tampoc compara els enumeradors de diferents enumeracions.
Per definir la classe enum, fem servir la paraula clau class després de la paraula clau enum.
Sintaxi:

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

Exemple:

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

A continuació es mostra una implementació per mostrar la classe Enum

CPP




descarregar vídeo de youtube amb vlc
// 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;> }>

>

>

Sortida

It's not Red Good people 1>

Els tipus enumerats declarats la classe enum també tenen més control sobre el seu tipus subjacent; pot ser qualsevol tipus de dades integral, com ara char, short o int sense sign, que serveix essencialment per determinar la mida del tipus.

Això s'especifica mitjançant dos punts i tipus subjacent després del tipus enumerat:

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

C++




#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:'<

>

col·lecció java

>

Sortida

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

Referència: https://en.cppreference.com/w/cpp/language/enum