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