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