سازنده پیش فرض یا default constructor چیست؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

سازنده پیش فرض یا default constructor چیست؟

+1 امتیاز
اصولاً به چه constructor ی پیش فرض گفته میشه؟ و چه اهمیتی این نوع سازنده در کلاس داره؟
سوال شده آبان 20, 1393  بوسیله ی Mad (امتیاز 245)   10 35 47
دوباره تگ گذاری شد آبان 20, 1393

2 پاسخ

+3 امتیاز
 
بهترین پاسخ

به سازنده ای که هیچ ورودی ای نمی گیره سازنده پیش فرض میگن.

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
} 

 

پاسخ داده شده آبان 20, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد آبان 21, 1393 بوسیله ی Mad
+2 امتیاز

سازنده ای که بدون پارامتر باشه میشه default constructor .در ضمن شما می تونید construtcor دلخواه خودتون را به عنوان پیش فرض قرار بدید.

Foo(const Foo& src) = default;

 

با قراردادن =dafault سازنده مورد نظر به عنوان سازنده پیش فرض در نظر گرفته میشه.

پاسخ داده شده آذر 6, 1393 بوسیله ی Mad (امتیاز 245)   10 35 47
...