به سازنده ای که هیچ ورودی ای نمی گیره سازنده پیش فرض میگن.
class A
{
A(){} //sazande pish farz
}
در صورتی که برای کلاس هیچ سازنده ای تعریف نکنید کامپایلر یک سازنده پیش فرض برای شما در نظر می گیره
وظیفه این سازنده هم این هستش که ُسازنده پیش فرض متغیر هایی که داخل کلاس تعریف شدن رو صدا میزنه(در صورت نبود سازنده پیش فرض زمان کامپایل ارور داده میشه )
سازنده پیش فرض برای انواع عددی مثل int ,char , ... این هست که کاری انجام نشه یعنی مقداری که می گیرن نامشخص هست .
و برای انواع غیر عددی یا شی از کلاس هایی که تعریف شده (مثلا string یا vector ) هم کاملا بستگی به تعریف کلاس مورد نظر داره مثلا سازنده پیش فرض std::string یک رشته تهی میسازه .
مثال :
#include <iostream>
#include <string>
class A
{
public:
A():number(1){}
int number;
};
class B
{
public:
int b_number;
char character;
std::string str;
A a_instance;
};
int main()
{
//dar khat zir sazande pish farz ke compiler khodkar gharar mide
//seda zade mishe ke in sazande sazande haye pish farz motaghaier haye
//ozv class ro be in shekl seda mizane :
// b_number,character meghdar namoshakhasi migiran chon sazane pish farzeshoon kari nemikone
// str meghdar tohi migire(reshte khali)
// baraye a_instance in sazande seda zade mishe :
// A():number(1){} va number 1 gozashte mishe
B b;
//khat zir sazande pish farz A ke tarif kardim
//seda zade mishe va a.number meghdar 1 migire
A a;
std::cout << a.number << '\n';//1 chap mishe
std::cout << b.a_instance.number << '\n';//1 chap mishe
std::cout << b.str << '\n';//chon str khali hast chizi chap nemishe
//chon sazande pish farz be mavared zir meghdari nadade har chizi momkene chap beshe
std::cout << b.character << '\n';
std::cout << b.b_number << '\n';
}
در صورتی که کلاس شما نیاز به سازنده پیش فرضی که کامپایلر میسازه نداره از delete استفاده کنید .
class A
{
A()=delete;
}
int main()
{
//A a; //error mide
}