logo

Enum klasės C++ ir jų pranašumas prieš Enum DataType

Enums arba Enumerated tipas (išvardijimas) yra vartotojo apibrėžtas duomenų tipas, kuriam galima priskirti tam tikras ribotas reikšmes. Šias reikšmes apibrėžia programuotojas deklaruodamas išvardintą tipą.

Enum klasės poreikis, o ne Enum tipas:
Žemiau pateikiamos kelios priežastys, kodėl Enum Type apribojimai ir kodėl mums reikia Enum klasės, kad juos apimtų.



1. Enum yra įvardytų sveikųjų skaičių konstantų rinkinys, reiškiantis, kad kiekvienas elementas priskiriamas sveikojo skaičiaus verte. 2.Jis deklaruojamas raktiniu žodžiu 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;> }>

>

>

sveikasis skaičius į dvigubą java
Išvestis

The roll no of avinash=68>

Du surašymus negali dalytis tais pačiais vardais:

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

>

>

Kompiliavimo klaida:

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

Joks kintamasis negali turėti pavadinimo, kuris jau yra tam tikrame sąraše:

masyvai java

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

Java dinaminis masyvas

>

>

Kompiliavimo klaida:

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

Enumai nėra tipo saugus :

CPP




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

>

>

Įspėjimas:

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

Enum klasė

C++11 pristatė enum klases (taip pat vadinamas apimties sąrašus ), todėl surašomi abu stipriai įvestas ir stipriai apibrėžtas . Klasės enum neleidžia netiesiogiai konvertuoti į int, taip pat nelygina skirtingų sąrašų surašytojų.
Norėdami apibrėžti enum klasę, naudojame klasės raktinį žodį po enum raktinio žodžio.
Sintaksė:

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

Pavyzdys:

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

Toliau pateikiamas diegimas, rodantis Enum klasę

CPP




java eilučių sujungimas
// 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;> }>

>

>

Išvestis

It's not Red Good people 1>

Išvardinti tipai, paskelbti enum klase, taip pat labiau kontroliuoja savo pagrindinį tipą; tai gali būti bet koks vientisas duomenų tipas, pvz., char, short arba besigned int, kuris iš esmės padeda nustatyti tipo dydį.

Tai nurodoma dvitaškiu ir pagrindiniu tipu po išvardyto tipo:

palyginti su styga
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:'<

>

>

Išvestis

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

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