C++ Constructors

در C++ Constructor (سازنده) تابعی خاص در یک کلاس است که هنگام ساخت شیء به طور خودکار اجرا می‌شود و معمولاً برای مقداردهی اولیه (initialize) اعضای کلاس استفاده می‌شود.

🟠 C++ Constructors

🔹 ویژگی‌های اصلی

  • نام سازنده دقیقاً همان نام کلاس است.

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

  • به طور خودکار هنگام ساخت شیء فراخوانی می‌شود.

  • می‌تواند پارامتر بگیرد تا مقادیر اولیه را تعیین کند.

🔹 1. سازندهٔ پیش‌فرض (Default Constructor)

اگر هیچ سازنده‌ای تعریف نکنید، کامپایلر یک سازندهٔ خالی می‌سازد.
اما می‌توانید خودتان هم یک سازندهٔ پیش‌فرض بنویسید:

#include <iostream> using namespace std; class Car { public: string brand; int year; // سازندهٔ پیش‌فرض Car() { brand = "Unknown"; year = 0; } }; int main() { Car c; // به طور خودکار فراخوانی می‌شود cout << c.brand << " " << c.year; // Unknown 0 }

🔹 2. سازندهٔ پارامتردار

برای مقداردهی با مقادیر دلخواه:

class Car { public: string brand; int year; // سازنده با پارامتر Car(string b, int y) { brand = b; year = y; } }; int main() { Car car1("Toyota", 2024); Car car2("BMW", 2023); cout << car1.brand << " " << car1.year << "\n"; cout << car2.brand << " " << car2.year << "\n"; }

🔹 3. سازندهٔ چندگانه (Overloading)

می‌توانید چند سازنده با پارامترهای مختلف تعریف کنید:

class Box { public: int width, height; Box() { width = height = 0; } // پیش‌فرض Box(int w, int h) { width = w; height = h; } // پارامتردار };

بسته به آرگومان‌ها، سازندهٔ مناسب فراخوانی می‌شود.

🔹 4. لیست مقداردهی اولیه (Initializer List)

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

class Car { public: string brand; int year; Car(string b, int y) : brand(b), year(y) { } };
  • این روش کارایی بالاتری دارد، مخصوصاً برای اعضای const یا رفرنس‌ها.

🔹 5. سازندهٔ کپی (Copy Constructor)

برای ساخت یک شیء جدید از روی شیء دیگر:

class Car { public: string brand; int year; Car(string b, int y) : brand(b), year(y) {} // سازندهٔ کپی Car(const Car &c) { brand = c.brand; year = c.year; } };

اگر خودتان تعریف نکنید، کامپایلر یک سازندهٔ کپی پیش‌فرض می‌سازد.

✅ نکات مهم

  • سازنده هیچ مقداری برنمی‌گرداند.

  • می‌توان از سازندهٔ صریح (explicit) برای جلوگیری از تبدیل ضمنی استفاده کرد.

  • اگر کلاس پوینتر یا منبع دینامیک دارد، سازندهٔ کپی و مخرب (destructor) مهم هستند (قاعده سه‌گانه).

خلاصه

نوع سازندهکاربرد
Defaultبدون پارامتر، مقادیر اولیه پیش‌فرض
Parameterizedمقداردهی با آرگومان
Overloadedچند نسخه با پارامترهای مختلف
Copy Constructorایجاد شیء جدید از روی شیء موجود
Initializer Listکارایی بالاتر برای اعضای const یا reference

سازنده‌ها در C++ ابزاری کلیدی برای آماده‌سازی و مقداردهی اولیه اشیا هستند و مدیریت تمیز و ایمن داده‌ها را امکان‌پذیر می‌کنند.