C++ Constructor Overloading

در ++C می‌توانید چند سازنده (Constructor) با نام یکسان ولی پارامترهای متفاوت در یک کلاس تعریف کنید. این ویژگی را Constructor Overloading (سازندهٔ چندگانه) می‌گویند.

💡 تعریف

  • Overloading یعنی داشتن چند سازنده با تعداد یا نوع پارامتر مختلف.

  • بسته به آرگومان‌هایی که هنگام ساخت شیء می‌دهید، کامپایلر سازندهٔ مناسب را انتخاب می‌کند.

🔹 مثال ساده

#include <iostream> using namespace std; class Box { public: int width, height; // 1️⃣ سازندهٔ پیش‌فرض Box() { width = 0; height = 0; } // 2️⃣ سازنده با یک پارامتر Box(int w) { width = w; height = w; // مربع } // 3️⃣ سازنده با دو پارامتر Box(int w, int h) { width = w; height = h; } void show() { cout << "Width: " << width << ", Height: " << height << endl; } }; int main() { Box b1; // → سازندهٔ پیش‌فرض Box b2(5); // → سازنده با یک پارامتر Box b3(4, 7); // → سازنده با دو پارامتر b1.show(); // Width: 0, Height: 0 b2.show(); // Width: 5, Height: 5 b3.show(); // Width: 4, Height: 7 }

✨ خروجی:

Width: 0, Height: 0 Width: 5, Height: 5 Width: 4, Height: 7

🔹 نکات کلیدی

  1. امضاهای متفاوت:

    • تعداد آرگومان‌ها متفاوت باشد.

    • یا نوع دادهٔ آرگومان‌ها متفاوت باشد.

  2. هیچ نوع بازگشتی (حتی void) برای سازنده وجود ندارد.

  3. اگر هیچ سازندهٔ پیش‌فرض ننویسید و فقط پارامتردار بسازید،
    ساخت شیء بدون آرگومان (;Box b1) خطا می‌دهد.

🔹 استفاده از لیست مقداردهی (Initializer List)

روش بهینه‌تر برای مقداردهی:

class Point { public: int x, y; Point() : x(0), y(0) {} Point(int v) : x(v), y(v) {} Point(int a, int b) : x(a), y(b) {} };

🔹 تفاوت با تابع Overload معمولی

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

  • اما قوانین تطبیق امضا (Signature Matching) همان قوانین Overload توابع است.

✅ خلاصه

نوعویژگی
Overloaded Constructorsچند سازنده با پارامترهای مختلف
انتخاب سازندهبر اساس تعداد و نوع آرگومان هنگام ایجاد شیء
مزیتانعطاف در ساخت اشیا با حالت‌های مختلف

نتیجه:
Constructor Overloading در C++ امکان می‌دهد برای شرایط مختلف، سازنده‌های گوناگون داشته باشید و شیء را به شکل‌های مختلف مقداردهی اولیه کنید.