المتغيرات
فضاءات التسمية
أفعال

cpp/language/enum

من cppreference.com
< cpp‏ | language

المتغيرات من نوع 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';
}