تیم برنامه نویسی گروه تمدن

مرجع کامل فارسی برنامه نویسی به زبان سی پلاس پلاس

  • Increase font size
  • Default font size
  • Decrease font size

نوع شمارشی enum و نحوه استفاده از آن

فرستادن به ایمیل چاپ مشاهده در قالب پی دی اف

به نام خدا

در ابتدا می بایست تعریف صحیحی از نوع شمارشی enum ارائه داد و در ادامه به نحوه استفاده از آن پرداخت. برای توضیح این موضوع از یک مثال استفاده می کنیم. فرض کنید می خواهید یک برنامه حسابداری بنویسید که در آن حقوق نظافت چی 3 واحد پول، حقوق منشی 5 واحد پول، حقوق کارمندان 6 واحد پول و حقوق کارشناسان 8 واحد پول باشد و در ادامه قصد دارید تا جمع پرداختی را محاسبه کنید...
راه اول بدون استفاده از enum)
در این روش می توانید مقدار حقوق هر فرد را جمع کنید که در این حالت خروجی برابر مقدار پرداختی در سر ماه خواهد بود. ولی در این روش دو مشکل وجود دارد. یکی اینکه اگر تعداد افراد شاغل در شرکت زیاد باشد، باید از یک دفترچه راهنما استفاده کنید تا فراموش نکنید که مثلا حقوق کارمند چند واحد پول بوده است و دیگر اینکه اگر فردی برنامه ی شما را بخواند متوجه نمی شود که 6 واحد پول به چه معناست. برای رفع این مشکلات از نوع شمارشی enum استفاده می کنیم. برای مشاهده جزییات به ادامه توجه کنید.
راه دوم با استفاده از enum)
ساده و صریح بگویم: در واقع در این روش کارمند را به معنای 6 واحد پول در نظر می گیریم و به کامپایلر می گوییم هر کجا نام کارمند را دید به جای آن 6 واحد پول جایگزین کن. به این صورت هم مشکل اول حل می شود (چرا که تنها یک بار حقوق کارمند را مشخص می کنیم و در ادامه تنها از آن استفاده می کنیم) و هم مشکل دوم. (چرا که به جای مقدار حقوق، نام کارمند را قرار می دهیم.)

------------------------------------------------------------------------------------

و اما نحوه تعریف و به کارگیری enum
نحوه تعریف enum بسیار مشابه تعریف کلاس می باشد. قبل از main برنامه و بعد از نام کتابخانه ها می بایست آن را به صورت زیر تعریف نمود:

enum  نام نوع شمارشی{

فیلد اول,

فیلد دوم,

...

};

(به ; یا همان نقطه ویرگول بعد از آکولاد آخر توجه شود)
در این مثال نام نوع شمارشی را «حقوق» و فیلدها را با افراد شاغل در شرکت تعیین می کنیم. یعنی:

enum hoghoogh {nezafatchi,monshi,karmand,karshenas};

در قطعه کد بالا دو کار صورت گرفته است. 1) نوع شمارشی برابر با hoghoogh بوده و 2) این نوع شمارشی می تواند مقادیری شامل nezafatchi,… داشته باشد، اما...
شاید از خود بپرسید کامپایلر چگونه متوجه می شود که به جای nezafatchi باید 3 واحد و به جای karmand از 6 واحد پول استفاده کند؟ جواب این است که کامپایلر متوجه نمی شود! در واقع زمانی که فیلد موجود در نوع شمارشی را مقدار دهی نکنید، کامپایلر آن ها را مشابه خانه های آرایه مقدار دهی می کند. یعنی nazafatchi برابر با 0، monshi برابر با 1، karmand برابر 2  و karshenas برابر 3 خواهد شد. برای اینکه از این اتفاق شوم جلوگیری کنید باید به هر فیلد از نوع شمارشی یک عدد نسبت دهید. این کار به سادگی و به روش زیر امکان پذیر است:

enum hoghoogh {nezafatchi=3,monshi=5,karmand=6,karshenas=8};

با این کار، تعریف شما بدون نقص و کامل می باشد و می توانید از آن استفاده کنید. اما قبل از آن یک نکته تکمیلی می ماند که بیان آن خالی از لطف نخواهد بود.
همان طور که می بینید عدد نسبت داده شده به karmand دقیقا یک واحد بیشتر از monshi بوده و جایگاه karmand  نیز درست بعد از نام monshi آمده است. در چنین شرایطی می توانید از نسبت دادن عددی به فیلد karmand خودداری کرده و جای آن را خالی بگذارید. به شکل زیر:

enum hoghoogh {nezafatchi=3,monshi=5,karmand,karshenas=8};

در چنین شرایطی کامپایلر به صورت خودکار فیلد karmand را با عدد 6 (5 بعلاوه 1!) مقدار دهی می کند. بدیهی است اگر فیلد  karshenasرا هم مقداردهی نکنیم این مقدار برابر 7 خواهد بود که البته در این مثال صحیح نیست.
نکته آخر این که در نوع شمارشی enum دو فیلد می توانند دارای مقادیر یکسانی باشند اما حتی در enumهای مختلف در یک محدوده از برنامه دو eunm نمی توانند دارای فیلدهایی با نام یکسانی باشند. (بدیهی است که نام enum ها نیز بایستی متفاوت باشد.) یعنی:
این نوع از تعریف صحیح است:

enum hoghoogh {nezafatchi=3,monshi=5,karmand=5,karshenas=8};

و این نوع از تعریف غلط است:

enum hoghoogh {nezafatchi=3,monshi=5,karmand,karshenas};
enum salary {servant,secretary,technician,karshenas};

 

------------------------------------------------------------------------------------

نحوه استفاده از enum نیز مشابه تعریف یک شی از یک کلاس می باشد. یعنی در main برنامه از فرمول زیر استفاده می کنیم:

نام متغیر         نام نوع شمارشی  ;

در مثال حسابداری شرکت برای محاسبه حقوق پرداختی نظافت چی در دی ماه به شکل زیر عمل می کنیم:

hoghoogh deymah_nezafatchi;

از اینجا به بعد نحوه استفاده از آن به سادگی امکان پذیر است.
در این مثال برای محاسبه جمع حقوق در شرایطی که 1 نظافتچی، 1 منشی، 3 کارمند و 1 کارشناس داشته باشیم به صورت زیر عمل خواهیم کرد:

# include <iostream>
using namespace std;
enum hoghoogh {nezafatchi=3, monshi=5, karmand, karshenas=8};
enum salary {servant,secretary,technician,karshenas};

int main()
{
hoghoogh deymah_nezaftchi=nezafatchi;
hoghoogh deymah_monshi=monshi;
hoghoogh deymah_karmand=karmand;
hoghoogh deymah_karshenas=karshenas;

int deymah_hoghoogh=deymah_nezaftchi+deymah_monshi+3*deymah_karmand+deymah_karshenas;

cout<<deymah_hoghoogh;
cout<<endl;
system("pause");
return 0;
}//end main

در صورت داشتن هر گونه سوال از اين بخش مي توانيد سوال خود را به ايميل زير ارسال نماييد:

آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسكریپت دارید

آخرین بروز رسانی مطلب در پنجشنبه ، 7 دی 1391 ، 11:28  

افزودن نظر

دوست عزیز و کاربر گرامی
نظرات بعد از بررسی در سایت درج خواهند شد.
مطمئنا از شنیدن انتقادهای شما خوشحال خواهیم شد.
دلیل فیلتر کردن نظرات صرفا جلوگیری از نظرات مغایر با اسلام و جمهوری اسلامی ایران می باشد. امیدواریم ما را به خاطر این کار درک نمایید. با تشکر






کد امنیتی
بازنشانی