Enumerations in C++
enum क्या है?
enum (enumeration) संबंधित पूर्ण-संख्या values के समूह को सरल नाम देता है। यह याद रखने के बजाय कि 0 का मतलब Monday और 1 का मतलब Tuesday है, आप उन्हें नाम देते हैं — code सादे अंग्रेज़ी जैसा पढ़ा जाता है और गलतियाँ पकड़ना आसान होता है।
एक सादा enum
#include <iostream>
using namespace std;
enum Day { Mon, Tue, Wed, Thu, Fri };
int main() {
Day today = Wed;
cout << "Day number: " << today << "\n"; // 2
return 0;
}Day number: 2
Default रूप से पहला नाम 0 है, अगला 1, और ऐसे ही — तो Wed 2 है।
Custom values
आप अपने numbers सेट कर सकते हैं; unset वाले आख़िरी से जारी रहते हैं:
enum Level { Low = 1, Medium = 5, High }; // High = 6switch में enums
Enums switch से स्वाभाविक रूप से जुड़ते हैं:
enum Signal { Red, Yellow, Green };
Signal s = Green;
switch (s) {
case Red: cout << "Stop\n"; break;
case Yellow: cout << "Wait\n"; break;
case Green: cout << "Go\n"; break;
}Go
enum class (scoped)
आधुनिक C++ enum class पसंद करता है, जो नाम scoped रखता है और चुपचाप int में नहीं बदलता:
enum class Color { Red, Green, Blue };
Color c = Color::Green; // Color:: se qualify karna zaroori
// int n = c; // ERROR: koi implicit conversion nahi
int n = (int)c; // explicit cast allowed hai → 1Color:: prefix का मतलब दो अलग scoped enums दोनों में बिना टकराव Red हो सकता है।
कौन-सा कब इस्तेमाल करें
| enum class तब जब | सादा enum ठीक तब जब |
|---|---|
| आप सुरक्षा और कोई नाम टकराव न चाहें | त्वरित code, छोटा scope |
| आप int conversion न चाहें | आप int value पर सीधे निर्भर हों |
नियम के रूप में, नए code में enum class पसंद करें।
आम गलतियाँ
enum classके साथColor::prefix भूलना।- सादे enum के नामों को scoped मानना — वे आसपास के scope में रिसते हैं।
- यह मानना कि
enum classअपने आप int में बदलता है (इसे cast चाहिए)। - दो सादे enums में एक नाम दोबारा इस्तेमाल करना, टकराव पैदा करना।
एक enum class Direction { North, East, South, West } परिभाषित करें। एक function लिखें जो Direction ले और switch से उसका नाम print करे। हर direction के लिए इसे call करें।
सारांश
- enum पढ़ने योग्य code के लिए संबंधित integer values के समूह को नाम देता है।
- Values default रूप से 0 से शुरू होती हैं; आप custom numbers सेट कर सकते हैं।
- Enums
switchstatements में साफ़ काम करते हैं। enum classscoped है और अंतर्निहित रूप से int में नहीं बदलता।- सुरक्षा के लिए आधुनिक C++ में
enum classपसंद करें।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
C++ में enum क्या है?
enum Day { Mon, Tue, Wed }; आपको magic number के बजाय Mon इस्तेमाल करने देता है, code को साफ़ और कम त्रुटि-प्रवण बनाते हुए।C++ में enum और enum class में क्या अंतर है?
enum अपने नाम आसपास के scope में रखता है और स्वतंत्र रूप से int में बदलता है, जो टकराव और bugs पैदा कर सकता है। enum class (scoped enum) अपने नाम enum के scope के अंदर रखता है और अंतर्निहित रूप से int में नहीं बदलता, इसे सुरक्षित और आधुनिक C++ में पसंदीदा बनाते हुए।C++ में enum constants को विशिष्ट values कैसे assign करते हैं?
= से values assign करते हैं, जैसे enum Level { Low = 1, Medium = 5, High = 10 };। जो constant आप assign नहीं करते वह पिछली value plus एक लेता है, तो numbering आख़िरी सेट value से अपने आप जारी रहती है।C++ में सादे enum के बजाय enum class क्यों पसंद किया जाता है?
enum class सादे enums की दो समस्याएँ टालता है: इसके नाम आसपास के scope में नहीं रिसते, तो अलग enums नाम दोबारा इस्तेमाल कर सकते हैं, और यह चुपचाप int में नहीं बदलता, जो आकस्मिक दुरुपयोग रोकता है। यह code को सुरक्षित और साफ़ बनाता है।क्या C++ में switch statement में enum इस्तेमाल कर सकते हैं?
switch में स्वाभाविक रूप से काम करते हैं क्योंकि वे integer-आधारित हैं। आप हर enum value के लिए एक case लिखते हैं, जो raw numbers इस्तेमाल करने से साफ़ है और compiler को आपको चेताने देता है अगर आप कोई value संभालना भूलें।