با قسمتی دیگر از آموزش ++C در خدمتتون هستیم؛ در این مطلب میخواهیم اولین گام برنامه نویسی شیء گرا یا همان Object Oriented Programming (به اختصار OOP) را برداریم. موضوع اصلی این بخش، داده های شمارشی c++ است (enumeration) بوده که در تمام زبانهای برنامه نویسی سطح بالا کاربرد دارد. قبل از مطالعه این قسمت، توصیه میکنم، بخش نهم از سری آموزش های ++C رو مطالعه کنید.
داده شمارشی چیست؟
فرض کنید در یک برنامه بخواهیم برای چهار فصل سال اعدادی را مشخص کنیم که هر کدام از این عددها بیانگر یک فصل باشد. در این صورت باید از داده های شمارشی c++ یا enum استفاده کرد که ساختار پیکربندی آن به شکل زیر است:
1 2 3 4 5 6 7 |
enum <نام> { x, y, z, .... } |
برای ساخت داده های شمارشی c++، ابتدا کلمه کلیدی enum و سپس نام داده شمارشی باید نوشته شود. در درون { } کلمههایی که قرار است شماره گذاری شوند را مینویسیم. با فرض اینکه اولین کلمه x باشد، مقدار متناظر آن 0 است. دومین کلمه 1 سومین کلمه 2 و تا آخر به همین ترتیب اضافه می شود. هرکدام از کلمهها با کاما از یکدیگر جدا میشوند. مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
enum Fasl { Bahar, Tabestan, Paeez, Zemestan } int main(){ Fasl f = Fasl::Bahar; if(f==Fasl::Bahar){ cout << "Bahar Ast." << endl; } else{ cout << "Bahar Nist." << endl; } getchar(); return 0; } |
1 2 |
Bahar Ast. |
خب همانطور که از نام “دادههای شمارشی” پیداست، ما نوع دیگری از داده را معرفی کردیم. به عبارتی دیگر مانند نوعهای دادهای پایه مثل int ، float ، double و … هم اکنون ما نوع دادهای به نام Fasl داریم که این نوع داده فقط چهار مقدار Paeez ،Tabestan ، Bahar و Zemestan را میپذیرد. به بیان سادهتر همانطور که int تنها اعداد صحیح قبول می کرد، نوع دادهای Fasl هم فقط چهار مقدار ذکر شده را قبول می کند.
ساخت شئ از داده شمارشی
با این توضیح، هرگاه بخواهیم یک متغیر از نوع Fasl داشته باشیم کافی است مانند تعریف دیگر متغیرها اول نوع آن که اینجا Fasl است را بنویسیم. سپس یک نام به آن بدهیم. حال میتوانیم آن را مقداردهی اولیه کنیم یا در درون برنامه مقداری را انتساب دهیم. اینجا به اصطلاح به f متغیر گفته نمیشود. به آن شیء گفته میشود، یک شیء از نوع دادهای Fasl. مقدار دادن هم با نوشتن نوع داده و گذاشتن :: انجام میشود. به کد زیر دقت کنید:
1 2 3 4 5 6 7 8 9 10 11 |
int main(){ Fasl a; Fasl b; a = Fasl::Tabestan; b = Fasl::Zemestan; cout << a << endl; cout << b << endl; getchar(); return 0; } |
1 2 3 |
1 3 |
در اول برنامه دو شیء از Fasl ایجاد کردیم. یکی با نام a و دیگری b. سپس به a مقدار Tabestan و به b مقدار Zemestan را دادیم. ماهیت داده شمارشی یک عدد است و چون اسمها از 0 تا n مقداردهی میشوند، بنابراین با چاپ کردن a عدد 1 و با چاپ کردن b عدد 3 نشان داده میشود.
دادههای شمارشی با اعداد دلخواه
اگر در ساختار تعریف enum، همراه با نوشتن کلمات آنها را مساوی یک عدد قرار دهیم، از قاعده 0 تا n مستثنا قائل میشویم.
1 2 3 4 5 6 7 |
enum Fasl { Bahar = 2, Tabestan = 8, Paeez = 12, Zemestan = 14 } |
از این پس ماهیت Bahar برابر عدد 2 است و بقیه فصل ها هم به همین ترتیب مقادیر مشخص شده را دارند. اما اگر فقط به نام اول مقدار داد و بقیه نام ها مقداری نگیرند، شروع عدد گزاری از مقدار نام اول است.
1 2 3 4 5 6 7 |
enum Fasl { Bahar = 5, Tabestan, Paeez, Zemestan } |
در این صورت Bahar برابر 5، Tabestan برابر 6، Paeez برابر 7 و Zemestan برابر 8 میشود. توصیه میکنم که مقداردهی انجام ندهید و اجازه دهید از 0 تا n مقداردهی شود.
کاربرد داده های شمارشی c++
هرجای برنامه که بخواهیم اعداد ثابتی استفاده کنیم که هرکدام مفهموم خاصی دارند باید از داده شمارشی استفاده کرد. به عنوان یک مثال کامل به کد زیر دقت کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
enum Day { Saturday = 1, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday } int main(){ Day yesterday = Day::Tuesday; Day today = Day::Wednesday; Day tomorrow = Day::Thursday; cout << yesterday << endl; cout << today << endl; cout << tomorrow << endl; getchar(); return 0; } |
1 2 3 4 |
4 5 6 |
داده شمارشی Day را تعریف کردیم که 7 عنصر دارد و چون اولین عنصر آن 1 مقدار گرفته است، بقیه عناصر نیز به ترتیب تا 7 علامت گزاری میشوند. در نهایت سه شی از Day ساختیم که چون روز انتشار این مطلب چهارشنبه است، یکی از شئها را today نامیدیم و مقدار Wednesday را به آن دادیم. دو شیء دیگر هم به دیروز و فردا اشاره میکنند.
امیدوارم که این مطلب برای شما کاربردی بوده باشه و مبحث داده های شمارشی c++ رو به خوبی فرا گرفته باشید. در جلسه بعدی، به مفاهیم مهم کلاسها و کار با آنها پرداخته میشود.?