enum
لو أردنا بناء برنامج له علاقة بتنظيم إشارة المرور ،فإنه لا بد أن نتعامل مع ثلاث قيم للإشارة و هي الأحمر و البرتقالي و الأخضر و لكن للأسف لا يوجد نوع بيانات في لغة السي بلس بلس لونية ، و لكن من الحلول التي قد يلجأ إليها الإنسان هي أن نقوم بإسناد الرقم و احد إلى الأحمر و اثنان للبرتقالي و ثلاثة إلى الأخضر و لكن هذا سيسبب تلبك لدى من سيقرأ شفرتك المصدرية (الكود) في لو لم تعلق على هذه الإسنادات و لذلك فإن لغة السي بلس بلس أتاحت لك بنية هي الenum وهي اختصاراً لـenumerated type و ترجمتها كما حاولت (و لا أعلم مدى صحة ذلك) الأنواع الفردية الخاصة حيث جاء في ترجمة enumerated التالي specify individually و هي بالفعل كذلك لأنها تتيح لك هذه البنية أن تشكل نوع البيانات الخاص بك فقد تكون قيم إشارة ضوئية و قد تكون غير ذلك .
المهم لنبدأ بالجانب العملي من هذه البنية و هذا مثال عليها في برنامج للإشارات الضوئية و سنورد بعد هذا البرنامج مقارنة بينه و بين برنامج آخر لنفس الغرض لا يستخدم الـenum
//enum arabic tutorial
#include<iostream>
using namespace std;
int main()
{
enum passinglight
{
PASSINGLIGHT_RED,//assigned to 0
PASSINGLIGHT_orange,//assigned to 1
PASSINGLIGHT_green,//assigned to 2
};
int i=PASSINGLIGHT_RED;
cout<<i<<endl;
i=PASSINGLIGHT_orange;
cout<<i<<endl;
i=PASSINGLIGHT_green;
cout<<i<<endl;
cin.get();//for Dev-c++ to stay the DOS window open after the programme ends.
return 0;
}الخرج
0
1
2
لإنشاء هذه البنية تكتب enum ثم الاسم الخاص بك و ثم القوسين المتوسطات و بنهاية القوس الثاني ; ثم في الداخل نكتب المتغيرات الخاصة بنا مسبوقة باسم enum الذي أنشأناه و لكن بأحرف كبيرة و لا نضع فاصلة بينهما و لكن نضع فاصلة تحتية ' _ ' بدلا من الفراغ و ننهيه بالفاصلة' ,' و بشكل تلقائي يتم إسناد قيمة صحيحية لكل متحول : للمتحول الأول 0 و الذي يليه 1 و هكذا بالترتيب و ننشئ ما نريد من المتحولات من النوع الجديد الذي أنشأناه في البرنامج ،مع العلم أننا يمكن أن نسند لهم ما نريد من أرقم و يتابع بعدها المترجم الإسناد بدءاً من الرقم الذي أسناده و يزيد واحد واحد و هذا مثال على هذا التعديل
//enum arabic tutorial
#include<iostream>
using namespace std;
int main()
{
enum passinglight
{
PASSINGLIGHT_RED=-2,//assigned to
PASSINGLIGHT_orange,//assigned to -1
PASSINGLIGHT_green,//assigned to 0
};
passinglight i=PASSINGLIGHT_RED;
cout<<i<<endl;
i=PASSINGLIGHT_orange;
cout<<i<<endl;
i=PASSINGLIGHT_green;
cout<<i<<endl;
cin.get();//for Dev-c++ to stay the DOS window open after the programme ends.
return 0;
}الخرج
-2
-1
0
و يمكن أن نسند إثنان أو كلهم بالأرقام التي نريد و الباقي الذي لم يسند له أي شيء يوضع له قيمة كما شرحنا سابقاً مثال
enum passinglight
{
PASSINGLIGHT_RED=-2,
PASSINGLIGHT_orange,//assigned to -1
PASSINGLIGHT_green=2,
};و الآن أعود لكتابه برنامج كالسابق و لكن دون استخدام تقنية enum
//enum arabic tutorial
#include<iostream>
using namespace std;
int main()
{
const int red=1;
const int orange=2;
const int green=3;
int x=red;
int y=orange;
int z=green;
cout<<x<<"\n"<<y<<"\n"<<z<<endl;
}
cin.get();//for Dev-c++ to stay the DOS window open after the programme ends.
return 0;
}