سازنده ها - Constructors
در زبان برنامه نویسی C++ ، "سازنده ها" توابعی هستند که (معمولا) برای مقدار دهی به متغیر ها یا اعضای یک شیء به کار می روند. این توابع به محض ایجاد یک شی از کلاس، فراخوانی و دستوراتشان اجرا می شوند. تابع سازنده همنام کلاس و فاقد نوع خروجی است. مثال زیر یک تابع سازنده برای کلاس را نشان می دهد :
class NAME
{ public:
// Constructor
NAME ()
{
cout << "im a Constructor!";
}
};
کد بالا ساده ترین نمونه ی یک کلاس و تابع سازنده است که هیچ سودی برای ما ندارد و فقط هنگام ایجاد یک شی از کلاس NAME عبارت "im a Constructor!" بر روی صفحه چاپ می شود. تابع سازنده همیشه باید به صورت عمومی یا public تعریف شود. یک کلاس می تواند چندین تابع سازنده داشته باشد، به شرطی که لیست پارامتر های هر تابع با یکدیگر متفاوت باشد. به عبارت دیگر تابع سازنده میتواند مانند دیگر توابع به صورت "چند شکلی" نوشته شود. تابع سازنده ای که هیچ پارامتری ندارد به عنوان "سازنده ی پیشفرض" در نظر گرفته می شود. اگر کلاسی سازنده ی پیشفرض نداشته باشد یک سازنده ی پیشفرض به صورت خودکار برای آن ایجاد می شود. کد زیر مثالی از چند شکلی سازنده ها است :
class NAME
{ public :
NAME () { cout << "im a Constructor!";}
NAME (int a) { FIRST = a;}
NAME (int a , int b) {FIRST = a; SECOND = b;}
private :
int FIRST , SECOND;
}
در این مثال سه سازنده برای کلاس ایجاد شده است که به ترتیب دارای 0 ، 1 و 2 پارامتر هستند. با توجه به پارامتر ارسالی در هنگام ایجاد یک شی از کلاس، برنامه متوجه می شود که از کدام سازنده استفاده کند. سازنده های بالا تنها برای مقدار دهی دو عضو کلاس NAME به نام های FIRST و SECOND استفاده شده اند ولی سازنده های می توانند بسیار پیچیده و موثر تر از این ها باشند. میتوانیم از روش دیگری برای تعریف بدنه تابع سازنده استفاده کنیم که مخصوص سازنده ها ایجاد شده اند و به آن "فهرست مقدار دهی" گفته می شود.
NAME (int a , int b) : FIRST(a), SECOND(b) {}
خط بالا روش دیگری برای مقدار دهی اعضای یک کلاس با سازنده است و با این روش اول که در ابتدا استفاده شده است فرقی نمی کند. در این روش مقدار دهی ها پس از علامت کولن : به ترتیب آمده اند و پس از آن علامت {} آمده است که میتوانیم مابقی کد های لازم را در آن قرار دهیم.
همانگونه که گفتیم سازنده ها در هنگام ایجاد یک شی از کلاس فراخوانی می شوند.
// main
استفاده از اولین سازنده
NAME obj;
استفاده از دومین سازنده
NAME obj(100);
استفاده از سومین سازنده
NAME obj(100,200);
+ نوشته شده در پنجشنبه بیستم بهمن ۱۳۹۰ ساعت 21:40 توسط MEC
|
GENERAL INFORMATION