در این آموزش، با نحوه کار با متغیر شمارشی (ENUM) آشنا می شوید. همچنین، یاد خواهید گرفت که enum چه زمانی در برنامه نویسی++C استفاده می شود.
داده شمارشی نوعی داده تعریف شده توسط کاربر است که شامل یک سری مقادیر ثابت است. برای تعریف داده شمارشی، کلید واژه ی enum استفاده می شود.
enum season { spring, summer, autumn, winter };
در بالا نام داده شمارشی season است و spring، summer، autumn و winter مقادیر season هستند.
به طور پیش فرض spring برابر ۰، summer برابر ۱ و به همین ترتیب. می توانید مقدار پیش فرض عنصر enum را در هنگام تعریف تغییر دهید.
enum season
{ spring = 0,
summer = 4,
autumn = 8,
winter = 12
};
تعریف نوع داده شمارشی
هنگامی که یک نوع داده شمارشی ایجاد می کنید، تنها طرحی برای متغیر ایجاد می شود. در اینجا چگونگی ایجاد متغیرهایی از نوع enum را خواهید دید.
enum boolean { false, true };
// inside function
enum boolean check;
در قطعه کد بالا متغیر check از نوع enum boolean ایجاد شده است.
در اینجا راه دیگری برای تعریف متغیر check با استفاده از ساختاری متفاوت ارائه شده است.
enum boolean
{
false, true
} check;
مثال ۱ : نوع شمارشی
#include <iostream>
using namespace std;
enum week { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };
int main()
{
week today;
today = Wednesday;
cout << “Day ” << today+1;
return 0;
}
خروجی
Day 4
مثال ۲ : تغییر مقدار پیش فرض Enum
#include <iostream>
using namespace std;
enum seasons { spring = 34, summer = 4, autumn = 9, winter = 32};
int main() {
seasons s;
s = summer;
cout << “Summer = ” << s << endl;
return 0;
}
خروجی
Summer = 4
چرا enum در برنامه ++C استفاده می شود؟
یک متغیر enum فقط یک مقدار را از بین مقادیر ممکن می گیرد. در کد زیر داریم:
#include <iostream>
using namespace std;
enum suit {
club = 0,
diamonds = 10,
hearts = 20,
spades = 3
} card;
int main()
{
card = club;
cout << “Size of enum variable ” << sizeof(card) << ” bytes.”;
return 0;
}
خروجی
Size of enum variable 4 bytes.
خروجی به این دلیل ۴ است که اندازه یک عدد صحیح ۴ بایت است.
متغیر های enum روش خوبی برای کار با flag ها هستند.
می توان همین کار را با استفاده از struct هم انجام داد. با این حال، کار با enum به شما کارایی و انعطاف پذیری می دهد.
چگونه از enum برای flag ها استفاده کنیم؟
به مثال زیر توجه کنید.
enum designFlags {
ITALICS = 1,
BOLD = 2,
UNDERLINE = 4
} button;
فرض کنید یک button برای برنامه ویندوز طراحی کرده اید که با آن می توان flag های ITALICS، BOLD و UNDERLINE را برای کار با متن تنظیم کرد.
دلیلی وجود دارد که تمام مقادیر ثابت توانی از ۲ را در سودوکد بالا دارند.
// In binary
ITALICS = 00000001
BOLD = 00000010
UNDERLINE = 00000100
از آنجا که مقادیر ثابت توان ۲ هستند، می توانید دو یا چند flag را یک بار بدون همپوشانی با استفاده از OR کردن بیت ها ترکیب کنید. این کار اجازه می دهد دو یا چند flag را در یک زمان انتخاب کنید. مثلا،
#include <iostream>
using namespace std;
enum designFlags {
BOLD = 1,
ITALICS = 2,
UNDERLINE = 4
};
int main()
{
int myDesign = BOLD | UNDERLINE;
// ۰۰۰۰۰۰۰۱
// | ۰۰۰۰۰۱۰۰
// ___________
// ۰۰۰۰۰۱۰۱
cout << myDesign;
return 0;
}
خروجی
۵
وقتی خروجی ۵ باشد، می دانید که همیشه bold و underline استفاده می شوند.
همچنین می توانید flag خود را به نیازمندی هایی که می خواهید اضافه کنید.
if (myDesign & ITALICS) {
// code for italics
}
در اینجا، ما italics را به طراحی خود اضافه کردیم. توجه داشته باشید که فقط کد برای italics در ساختار if نوشته شده است.
بدون استفاده از enum ها می توانید تقریبا هر چیزی را در ++C پیاده سازی کنید. با این حال، در شرایط خاص می توانند بسیار مفید باشند. این نکته ای است که برنامه نویسان خوب را از برنامه نویسان بزرگ متمایز می کند.