نوع شمارشي enum در سی پلاس پلاس ++C
يک نوع شمارشي يک نوع صحيح است که توسط کاربر مشخص ميشود. نحو تعريف يک نوع شمارشي به شکل زير است:
{enum typename{enumerator-list
که enum کلمهاي کليدي است، typename نام نوع جديد است که کاربر مشخص ميکند و enumerator-list مجموعه مقاديري است که اين نوع جديد ميتواند داشته باشد.
به عنوان مثال به تعريف زير دقت کنيد:
{enum Day{SAT,SUN,MON,TUE,WED,THU,FRI
حالا Day يک نوع جديد است و متغيرهايي که از اين نوع تعريف ميشوند ميتوانند يکي از مقادير SAT و SUN و MON و TUE و WED و THU و FRI را داشته باشند.
;Day day1,day2
;day1 = MON
;day2 = THU
وقتي نوع جديد Day و محدودۀ مقاديرش را تعيين کرديم، ميتوانيم متغيرهايي از اين نوع جديد بسازيم. در کد بالا متغيرهاي day1 و day2 از نوع Day تعريف شدهاند. آنگاه day1 با مقدار MON و day2 با مقدار THU مقداردهي شده است.
مقادير SAT و SUN و ... هر چند که به همين شکل به کار ميروند اما در کامپیوتر به شکل اعداد صحيح 0 و 1 و 2 و ... ذخيره ميشوند. به همين دليل است که به هر يک از مقادير SAT و SUN و ... يک شمارشگر ميگويند. ميتوان مقادير صحيح دلخواهي را به شمارشگرها نسبت داد:
{enum Day{SAT=1,SUN=2,MON=4,TUE=8,WED=16,THU=32,FRI=64
اگر فقط بعضي از شمارشگرها مقداردهي شوند، آنگاه ساير شمارشگرها که مقداردهي نشدهاند مقادير متوالي بعدي را خواهند گرفت:
{enum Day{SAT=1,SUN,MON,TUE,WED,THU,FRI
دستور بالا مقادير 1 تا 7 را به ترتيب به روزهاي هفته تخصيص خواهد داد. همچنين دو يا چند شمارشگر در يک فهرست ميتوانند مقادير يکساني داشته باشند:
{enum Answer{NO=0,FALSE=0,YES=1,TRUE=1,OK=1
آخر اين که نام شمارشگرها نبايد به عنوان نام متغيرهاي ديگر در جاهاي ديگر برنامه استفاده شود. مثلا:
{enum Score{A,B,C,D
;float B
;char c
در تعريفهاي بالا B و C را نبايد به عنوان نام متغيرهاي ديگر به کار برد زيرا اين نامها در نوع شمارشي Score به کار رفته است. شمارشگرهاي همنام نبايد در محدودههاي مشترک استفاده شوند. براي مثال تعريفهاي زير را در نظر بگيريد:
{enum Score{A,B,C,D
{enum Group{AB,B,BC
دو تعريف بالا غيرمجاز است زيرا شمارشگر B در هر دو تعريف Score و Group آمده است. انواع شمارشي براي توليد کد «خود مستند» به کار ميروند، يعني کدي که به راحتي درک شود و نياز به توضيحات اضافي نداشته باشد. مثلا تعاريف زير خودمستند هستند زيرا به راحتي نام و نوع کاربرد و محدودۀ مقاديرشان درک ميشود:
{enum Color{RED,GREEN,BLUE,BLACK,ORANGE
{enum Time{SECOND,MINUTE,HOUR
{enum Date{DAY,MONTH,YEAR
{enum Language{C,DELPHI,JAVA,PERL
{enum Gender{MALE,FEMALE



