سازنده در ++C — راهنمای جامع



تعداد بازدید ها:
0

در این مقاله با مفاهیم مرتبط با سازنده در ++C آشنا خواهید شد. بدین ترتیب با معنی سازنده، شیوه ایجاد آن و انواع سازنده در ++C آشنا می‌شوید. «سازنده» (Constructor) نوع خاصی از تابع عضویت است که در زمان ایجاد یک شیء، آن را به صورت خودکار مقداردهی می‌کند. برای مطالعه بخش قبلی روی لینک زیر کلیک کنید:

کامپایلر یک تابع عضو را بر اساس نام و نوع بازگشتی‌اش به عنوان سازنده شناسایی می‌کند. سازنده نامی یکسان با کلاس دارد و هیچ نوع بازگشتی در آن تعریف نمی‌شود. ضمناً سازنده همواره عمومی است.


برنامه فوق یک سازنده را نشان می‌دهد که بدون نوع بازگشتی تعریف شده و با کلاس همنام است.

طرز کار سازنده چگونه است؟

در شبه کد فوق، ()temporary یک سازنده است. زمانی که یک شیء با کلاس temporary ایجاد می‌شود، سازنده به صورت خودکار فراخوانی می‌شود و x با مقدار 5 و y با مقدار 5.5 مقداردهی می‌شود.

همچنین می‌توانید اعضای داده‌ای درون بدنه سازنده را به صورت زیر مقداردهی کنید. با این حال این متد ترجیحی ندارد.


استفاده از سازنده در ++C

فرض کنید روی 100 شیء از نوع Person کار می‌کنید و مقدار پیش‌فرض برای عضو داده‌ای age برابر با صفر است. در این حالت، مقداردهی همه اشیا به صورت دستی کاری بسیار دشوار خواهد بود. به جای آن می‌توانید یک سازنده تعریف کنید که مقدار اولیه 0 برای age تعیین کند. سپس تنها کاری که باید انجام دهید، ایجاد یک شیء Person است تا سازنده به صورت خودکار age را مقداردهی کند.

این موقعیت‌ها در زمان مدیریت آرایه‌ی اشیا به طور مکرر پیش می‌آیند. همچنین در صورتی که بخواهید نوعی کد را بی‌درنگ پس از ایجاد یک شیء اجرا کنید، باید از این روش استفاده کنید. بدین ترتیب می‌توانید کد را درون بدنه سازنده قرار دهید.

مثال 1: سازنده در ++C

مساحت یک مستطیل را محاسبه کرده و آن را نمایش دهید:


در برنامه فوق، کلاس Area برای مدیریت کارکردهای مرتبط با مساحت ایجاد شده است. این کلاس دو عضو داده‌ای به نام‌های length و breadth دارد. در کد فوق یک سازنده تعریف شده است که مقدار اولیه length را برابر با 5 و مقدار اولیه breadth را برابر با 2 تعیین می‌کند.

همچنین سه تابع عضو دیگر به نام‌های ()GetLength() ،AreaCalculation و ()DisplayArea داریم که طول را از کاربر می‌گیرند و مساحت را محاسبه کرده و نمایش می‌دهند. سپس تابع عضو ()GetLength اجرا می‌شود که مقدار length و breadth را از کاربر برای شیء A1 می‌گیرد. بدین ترتیب طول و عرض شیء A1 تغییر می‌یابد. در ادامه مساحت برای شیء A1 محاسبه شده و با فراخوانی تابع ()AreaCalculation در متغیر temp ذخیره می‌شود و در نهایت نمایش پیدا می‌کند.

در مورد شیء A2 هیچ داده‌ای از کاربر گرفته نمی‌شوند. بنابراین length و breadth به ترتیب برابر با 5 و 2 باقی می‌مانند. در نهایت مساحت برای A2 محاسبه شده و مقدار 10 نمایش می‌یابد.

خروجی


Overload کردن سازنده

سازنده را می‌توان به روشی مانند Overload کردن تابع، Overload نمود. سازنده‌های Overload شده نامی یکسان دارند، اما تعداد آرگومان‌هایشان متفاوت است. بسته به تعداد و نوع آرگومان‌های ارسالی، یک سازنده خاص فراخوانی می‌شود. از آنجا که چندین سازنده وجود دارد، آرگومان سازنده نیز باید در زمان ایجاد شیء ارسال شود.

مثال 2: Overload کردن سازنده


در مورد شیء A1 هیچ آرگومانی در زمان ایجاد شیء ارسال نمی‌شود. از این رو سازنده بدون هیچ آرگومانی فراخوانی می‌شود که مقدار اولیه length را برابر با 5 و breadth را برابر با 2 تعیین می‌کند. بدین ترتیب مساحت شیء A1 برابر با 10 خواهد بود.

در مورد شیء A2 در زمان ایجاد شیء مقادیر 2 و 1 به عنوان آرگومان ارسال می‌شوند. از این رو سازنده بدون هیچ آرگومانی فراخوانی می‌شود که مقدار اولیه length را برابر با l (در این مورد 2) و مقدار اولیه breadth را برابر با b (در این مورد 1) تعیین می‌کند. بدین ترتیب مساحت شیء A2 برابر با 2 خواهد بود.

خروجی


سازنده کپی پیش‌فرض

یک شیء می‌تواند با شیء دیگری از همان نوع مقداردهی اولیه شود. این کار همان کپی کردن محتوای یک کلاس به کلاس دیگر است. در برنامه فوق اگر بخواهیم یک شیء A3 داشته باشیم که شامل مقادیر یکسانی با A2 باشد، می‌توانیم از روش زیر استفاده کنیم:


ممکن است فکر کنید برای انجام این کار باید یک سازنده جدید ایجاد کنید، اما در واقع نیازی به ساخت سازنده جدید وجود ندارد، چون این سازنده کپی قبلاً در همه کلاس‌ها به صورت پیشفرض ساخته شده است.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

به عنوان حامی، استارتاپ، محصول و خدمات خود را در انتهای مطالب مرتبط مجله فرادرس معرفی کنید.

telegram
twitter