نوع شمارشی (enum) در زبان ++C — راهنمای جامع

۴۷۵ بازدید
آخرین به‌روزرسانی: ۱ مهر ۱۴۰۲
زمان مطالعه: ۳ دقیقه
نوع شمارشی

در این مقاله با طرز کار با نوع شمارشی (enum) در زبان ++C آشنا می‌شوید. ضمناً موارد استفاده شایع این نوع را در زبان برنامه‌نویسی ++C توضیح خواهیم داد. برای مطالعه بخش قبلی این سری مقالات روی لینک زیر کلیک کنید:

منظور از نوع شمارشی یک نوع داده تعریف‌شده از سوی کاربر است که شامل ثابت‌های صحیحی است. برای تعریف یک نوع شمارشی باید از کلیدواژه enum استفاده کنیم:

enum season { spring, summer, autumn, winter };

در کد فوق نام شمارش season است و عبارت‌های spring ،summer و winter از نوع season هستند.

Spring به صورت پیش‌فرض مقدار 0 دارد، summer مقدار 1 و همین طور تا آخر هر فصل یک عدد دارد. در صورت نیاز می‌توان مقدار پیش‌فرض یک عنصر 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;

مثال 1: نوع شمارشی

#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

مثال 2: تغییر دادن مقدار پیش‌فرض 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

دلیل استفاده از نوع شمارشی در ++C چیست؟

متغیر شمارشی تنها یک مقدار را از میان مقادیر مختلف می‌گیرد. برای درک بهتر به مثال زیر توجه کنید:

#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.

دلیل این حالت آن است که اندازه عدد صحیح 4 بایت است. بدین ترتب enum به یک گزینه مناسب برای کار با فلگ‌ها تبدیل می‌شود. همین کار را با استفاده از ساختارهای ++C نیز می‌توان انجام داد. با این حال کار با enum-ها کارایی بالایی را به همراه انعطاف‌پذیری ایجاد می‌کند.

شیوه استفاده از enum برای فلگ‌ها

به مثال زیر توجه کنید:

enum designFlags {
	ITALICS = 1,
	BOLD = 2,
	UNDERLINE = 4
} button;

فرض کنید دکمه‌ای برای اپلیکیشن ویندوزی طراحی می‌کنید. می‌توانید فلگ‌های ITALICS ،BOLD و UNDERLINE را برای کار با متن تنظیم کنید. دلیل خوبی وجود دارد که چرا همه ثابت‌های تجمعی در شبه کد قبلی توانی از 2 هستند:

// In binary

ITALICS = 00000001
BOLD = 00000010
UNDERLINE = 00000100

از آنجا که ثابت‌های تجمعی توانی از 2 هستند، می‌توان دو یا چند فلگ را بدون همپوشانی با استفاده از عملگر بیتی OR | با هم ترکیب کرد. بدین ترتیب می‌توان دو یا چند فلگ را همزمان انتخاب کرد. به مثال زیر توجه کنید:

#include <iostream>
using namespace std;
enum designFlags {
    BOLD = 1,
    ITALICS = 2,
    UNDERLINE = 4
};
int main() 
{
    int myDesign = BOLD | UNDERLINE; 
        //    00000001
        //  | 00000100
        //  ___________
        //    00000101
    cout << myDesign;
    return 0;
}

خروجی

5

هنگامی که خروجی برابر با 5 است، می‌دانیم که متن باید درشت و زیرخط‌دار باشد. ضمناً می‌توان فلگ را به الزامات نیز اضافه کرد:

if (myDesign & ITALICS) {
    // code for italics
}

در کد فوق حالت italics را به طراحی خود اضافه می‌کنیم. توجه کنید که تنها کد مربوط به italics درون گزاره if نوشته شده است. شما بدون استفاده از انواع شمارشی، تقریباً همه چیز را می‌توانید در زبان برنامه‌نویسی ++C پیاده‌سازی کنید، اما توجه داشته باشید که این نوع داده در برخی موارد می‌تواند کاملاً کارآمد باشند. این همان چیزی است که برنامه نویسان خوب را از برنامه نویسان عالی جدا می‌کند. برای مطالعه بخش بعدی روی لینک زیر کلیک کنید:

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۱۵ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
programiz

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *