سازنده ها و مخربها در يک کلاس
در يک کلاس توابعی تعريف ميشه که یه دسته درست در هنگام ايجاد يک شئ از آن کلاس و دسته ديگر درست قبل از از بين بردن يک شئ از يک کلاس اجرا می شوند .
دسته اول را سازنده یا Constractor و دسته دوم را مخرب يا Destractor گويند .
==============
اگر توابعی به عنوان سازنده و مخرب تعريف نشود . کامپايلر توابع پيش فرضی را ايجاد می کند که تنها وجود دارند و هيچ کار خاصی انجام نمی دهند اما شما می توانيد سازنده يا مخرب دلخواه خود را بنويسيد که درست قبل ايجاد شئ اجرا شوند يا درست قبل از تخريب شئ اجرا شوند .
=============
برای روشن شدن مطلب یه مثال می زنم :
شاید شما بخواهید وقتی یک شئ ایجاد می کنید به یه تعداد معلوم یا نا معلومی متغییر به صورت دینامیکی از سیستم بگیرید . برای این کار آن را داخل تابع سازنده خود قرار می دهید .
حال وقتی این برنامه به اتمام می رسد یا این شئ از بین برده می شود باید این حافظه دینامیک به سیستم برگشت داده شود . پس تابعی به نام مخرب می نویسیم که قبل از اینکه شئ از بین برود حافظه را آزاد کند و به سیستم تحویل دهد .
=============
اما چگونه بنویسیم ؟؟؟
در یک کلاس اگر تابعی با نام آن کلاس بنویسید به عنوان سازنده محسوب می شود و قبل ایجاد شئ حتما یک بار اجرا می شود .
مثلا نام کلاس شما Cat.h باشد :
سازنده شما باید تابعی به نام Cat باشد که ممکن است ورودی و یا خروجی داشته ویا نداشته باشد که به اختیار شما است .
مخرب نیز مشابه به سازنده است با یک تفاوت در نام آن که در ابتدای نام تابع حرف(~) و سپس نام کلاس نوشته می شود و بقیه ماجرا ...
++++++++++++++++++++++
اگر به یاد داشته باشید دردرسهای قبل گفته شد که در یک کلاس فقط تعریف تابع آورده می شود و خود تابع در یک فایل با پسوند cpp نوشته می شود . اما یک استثنا وجود دارد به نام توابع In Line یا یک خطی ::
می توان توابع کوتاه در حد یکی دو خط را همانجا در کنار تعریف تابع در کلاس مورد نظر نوشت .
این معمولا برای سازنده ها و مخربهای کوتاه کاربرد دارد و لطفا از این سوء استفاده نکنید
مثال :
} class Cat
:public
{void Cat(void){int a=10
{void ~Cat(void){a=20
}
البته اين تنها يک مثال است و هر کار ديگری نيز می توانيد در سازنده و مخرب به عنوان يک تابع انجام دهيد .
در يک کلاس توابعی تعريف ميشه که یه دسته درست در هنگام ايجاد يک شئ از آن کلاس و دسته ديگر درست قبل از از بين بردن يک شئ از يک کلاس اجرا می شوند .
دسته اول را سازنده یا Constractor و دسته دوم را مخرب يا Destractor گويند .
==============
اگر توابعی به عنوان سازنده و مخرب تعريف نشود . کامپايلر توابع پيش فرضی را ايجاد می کند که تنها وجود دارند و هيچ کار خاصی انجام نمی دهند اما شما می توانيد سازنده يا مخرب دلخواه خود را بنويسيد که درست قبل ايجاد شئ اجرا شوند يا درست قبل از تخريب شئ اجرا شوند .
=============
برای روشن شدن مطلب یه مثال می زنم :
شاید شما بخواهید وقتی یک شئ ایجاد می کنید به یه تعداد معلوم یا نا معلومی متغییر به صورت دینامیکی از سیستم بگیرید . برای این کار آن را داخل تابع سازنده خود قرار می دهید .
حال وقتی این برنامه به اتمام می رسد یا این شئ از بین برده می شود باید این حافظه دینامیک به سیستم برگشت داده شود . پس تابعی به نام مخرب می نویسیم که قبل از اینکه شئ از بین برود حافظه را آزاد کند و به سیستم تحویل دهد .
=============
اما چگونه بنویسیم ؟؟؟
در یک کلاس اگر تابعی با نام آن کلاس بنویسید به عنوان سازنده محسوب می شود و قبل ایجاد شئ حتما یک بار اجرا می شود .
مثلا نام کلاس شما Cat.h باشد :
سازنده شما باید تابعی به نام Cat باشد که ممکن است ورودی و یا خروجی داشته ویا نداشته باشد که به اختیار شما است .
مخرب نیز مشابه به سازنده است با یک تفاوت در نام آن که در ابتدای نام تابع حرف(~) و سپس نام کلاس نوشته می شود و بقیه ماجرا ...
++++++++++++++++++++++
اگر به یاد داشته باشید دردرسهای قبل گفته شد که در یک کلاس فقط تعریف تابع آورده می شود و خود تابع در یک فایل با پسوند cpp نوشته می شود . اما یک استثنا وجود دارد به نام توابع In Line یا یک خطی ::
می توان توابع کوتاه در حد یکی دو خط را همانجا در کنار تعریف تابع در کلاس مورد نظر نوشت .
این معمولا برای سازنده ها و مخربهای کوتاه کاربرد دارد و لطفا از این سوء استفاده نکنید
مثال :
} class Cat
:public
{void Cat(void){int a=10
{void ~Cat(void){a=20
}
البته اين تنها يک مثال است و هر کار ديگری نيز می توانيد در سازنده و مخرب به عنوان يک تابع انجام دهيد .