cpp/language/enum
من cppreference.com
المتغيرات من نوع enum هي متغيرات تشير الى عدة قيم وليس الى قيمة محددة .
| enum name : type attr { enumerator = constexpr , enumerator = constexpr , ... } | (1) | ||||||||
| enum class name : type attr { enumerator = constexpr , enumerator = constexpr , ... } | (2) | (since C++11) | |||||||
| enum struct name : type attr { enumerator = constexpr , enumerator = constexpr , ... } | (3) | (since C++11) | |||||||
1- هذا النوع يقوم بتعريف متغير من نوع enum وكل عنصرمن هذه العناصر تتحول الى النوع int بطريقة غير صريحة .
اذا لم تحدد قيمة العنصر بشكل صريح , فان كل العناصر ستكون من النوع int, كما يمكن تحديد قيمة كل عنصر باستخدام القيم الثابتة وتتحول الى النوع int بشكل غير صريح أيضا .
2- تعريف متغير من نوع enum , ويمكن الولوج الى عناصر المتغير حصريا على النحو التالي :
name::enumerator
كما يمكن لعناصره أن تصبح من النوع int باتسخدام static_cast , اذا لم تحدد قيمة العناصر بشكل صريح , فستتحول الى النوع int.
| name | - | اسم المتغير الذي ستستخدمه , يمكن أن لا تستسخدم الاسم اطلاقا ستحصل على متغير ثابت ولكنك لن تحصل على متغير جديد. |
| type (C++11) | - | تحدديد نوع المناصر الداخلية وهو اختياري . |
| attr (C++11) | - | قيمة أو أكثر تحدد طبيعة ونوع العناصر |
| enumerator | - | التصريح بقيمة أو أكثر تحدد عناصر المتغير enum .
|
| constexpr | - | قيمة اختيارية تسند الى العناصر enumerator , اذا كان العنصر هو الأول في القائمة فحينها تكون قيمة العنصر هي 0 أما اذا لم يكن العنصر هو الأول في القائمة فاذن قيمة العنصر هي قيمة العنصر الذي قبله زائد 1 .
|
قم بتشغيل هذا الكود:
#include <iostream>
// color may be red (value 0), yellow (value 1), green (value 20), or blue (value 21)
enum color {
red,
yellow,
green = 20,
blue
};
// altitude may be altitude::high or altitude::low
enum class altitude : char {
high='h',
low='l', // C++11 allows the extra comma
};
// the constant d is 0, the constant e is 1, the constant f is 3
enum { d, e, f=e+2 };
int main()
{
color col = red;
altitude a;
a = altitude::low;
std::cout << "red = " << col << " blue = " << blue << '\n'
<< "a = " << static_cast<char>(a) << '\n'
<< "f = " << f << '\n';
}