در این جلسه به بررسی کلاسها و اشیا در ++C می پزدازیم. مهمترین هدف برنامهنویسی ++C اضافه کردن شیگرایی به زبان C بوده و بنابراین کلاسها ویژگی مرکزی ++C هستند که برنامهنویسی مبتنی بر شیگرایی را مهیا ساختهاند. کلاسها معمولاً نوع داده تعریف شده توسط کاربر (user-defined type) نامیده میشوند.
یک کلاس برای مشخص کردن قالب یک شی به کار رفته و دادهها و متدهای مربوطه را ترکیب کرده تا آن داده را به صورت یک پکیج آماده دربیاورد. داده و توابع درون یک کلاس، اعضای کلاس (members of class) نامیده میشوند.
تعریف کلاسها در ++C
با تعریف یک کلاس، طرحی برای یک نوع داده تعریف میکنیم. این کار درواقع هیچ دادهای را تعریف نمیکند، بلکه مشخص میکند که این کلاس چه معنی دارد، به عبارت دیگر یک شی از آن کلاس حاوی چه دادههایی است و چه عملیاتی را میتوان روی چنین دادهای انجام داد.
تعریف یک کلاس با کلیدواژه class آغاز شده و پس از آن نام کلاس، و به دنبال آن بدنه کلاس درون یک جفت آکلاد نوشته میشود. تعریف یک کلاس باید با یک سمیکالن یا لیستی از اعلانها به اتمام رسد. برای مثال، نوع داده Box را با استفاده از کلیدواژه class به صورت زیر تعریف میکنیم.
class Box { public: double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box };
کلیدواژه public مشخص کننده سطح دسترسی اعضای کلاس میباشد. به یک عضو با سطح دسترسی عمومی (public)، میتوان خارج از کلاس و هرجایی درون دامنه شی کلاس دسترسی داشت. میتوان همچنین سطح دسترسی اعضای کلاس را به صورت خصوصی (public) یا محافظت شده (protected) تعریف کرد که در بخشهای بعدی راجع به آنها صحبت خواهیم کرد.
تعریف اشیا در ++C
یک کلاس طرحی برای اشیا فراهم میکند، پس در نتیجه یک شی باید از یک کلاس ساخته شود. اعلان اشیا یک کلاس را دقیقاً به همان روشی که متغیرهای پایه را اعلان کردیم، انجام میدهیم. دستورات زیر دو شی از کلاس Box را اعلان میکند.
Box Box1; // Declare Box1 of type Box Box Box2; // Declare Box2 of type Box
اشیا Box1 و Box2 دارای کپی مخصوص به خود از دادههای عضو کلاس میباشند.
دسترسی به دادههای عضو
با استفاده از عملگر دسترسی مستقیم (.) میتوان به دادههای عضو عمومی (public) دسترسی پیدا کرد. برای روشن شدن مسئله اجازه دهید مثال زیر را بررسی کنیم.
#include <iostream> using namespace std; class Box { public: double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box }; int main() { Box Box1; // Declare Box1 of type Box Box Box2; // Declare Box2 of type Box double volume = 0.0; // Store the volume of a box here // box 1 specification Box1.height = 5.0; Box1.length = 6.0; Box1.breadth = 7.0; // box 2 specification Box2.height = 10.0; Box2.length = 12.0; Box2.breadth = 13.0; // volume of box 1 volume = Box1.height * Box1.length * Box1.breadth; cout << "Volume of Box1 : " << volume <<endl; // volume of box 2 volume = Box2.height * Box2.length * Box2.breadth; cout << "Volume of Box2 : " << volume <<endl; return 0; }
با کامپایل و اجرای کد فوق، خروجی زیر حاصل میشود.
Volume of Box1 : 210 Volume of Box2 : 1560
باید دقت کنید که با استفاده از عملگر دسترسی مستقیم (.) نمیتوان به دادههای عضو خصوصی (private) یا محافظت شده (protected) دسترسی پیدا کرد. نحوه دسترسی به اعضای خصوصی و محافظت شده را در ادامه خواهیم آموخت.
جزئیات کلاسها و اشیا
تا اینجا با اصول ابتدایی اشیا و کلاسها در ++C آشنا شدید. مفاهیم جذاب بیشتری در همین رابطه را در بخشهای زیر خواهیم دید.
ردیف |
مفهوم و توضیح آن |
1 |
توابع عضو کلاس (Class Member Functions) تابع عضو یک کلاس تابعی است که تعریف یا اعلان آن مثل هر متغیر دیگری در درون کلاس قرار دارد. |
2 |
ویرایشگر دسترسی کلاس (Class Access Modifiers) یک عضو از کلاس را میتوان به صورت عمومی، خصوصی یا محافظت شده تعریف کرد. اعضا در حالت پیش فرض به صورت خصوصی تعریف میشوند. |
3 |
سازنده و تخریب کننده (Constructor & Destructor) سازنده یک کلاس یک تابع خاص از کلاس است که هنگام ایجاد یک شی جدید از کلاس فراخوانده میشود.تخریب کننده نیز تابعی خاص از کلاس است که هنگام حذف کردن شی از کلاس فراخوانده میشود. |
4 |
سازنده کپی (Copy Constructor) سازنده کپی ، سازنده ای است که یک شی جدید را از روی شیای از همان کلاس که قبلاً ساخته شده است آغاز میکند. |
5 |
توابع دوست (Friend Functions) یک تابع دوست اجازه دسترسی کامل به اعضای خصوصی و محافظت شده یک کلاس را دارد. |
6 |
توابع درون خطی (Inline Functions) برای یک تابع درون خطی، کامپایلر تلاش میکند تا کد درون بدنه تابع را در محل فراخوانی تابع بسط دهد. |
7 |
(this Pointer) this اشارهگر هر شی یک اشارهگر مخصوص this دارد که به خود شی اشاره میکند. |
8 |
اشاره گر به کلاس (Pointer to C++ Classes) اشارهگر به یک کلاس دقیقاً همانند اشارهگر به یک ساختار است. در حقیقت یک کلاس یک ساختار با توابعی درونی است. |
9 |
اعضای ایستای یک کلاس (Static Members of a Class) هم دادههای عضو و هم توابع عضو یک کلاس را میتوان به صورت ایستا تعریف کرد. |
منبع: ترجمه از سایت tutorialspoint.com
خب امیدواریم مهمترین بحث ++C یعنی کلاسها و اشیا در ++C را یادگرفته باشید. در جلسه بعدی آموزش ++C با ما همراه باشید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.