زمان مقدار دادن به آرایه کلاس و... اگر تعداد ورودی های {} کمتر از اعضای عضو باشه ممکنه چند تا حالت پیش بیاد در c++
اگر بخواهید به کلاس مقدار بدین :
اگر ّبرای کلاس سازنده تعریف کرده باشین و سازنده پیش فرض در دسترس باشه -->سازنده پیش فرض صدا زده میشه
اگر ّبرای کلاس سازنده تعریف کرده باشین و سازنده پیش فرض در دسترس نباشه کد اجرا نمیشه .
مثال :
class A
{
public:
A(){cout<<"constructor 1\n";}
A(int a){cout<<"constructor 2\n";}
};
int main( )
{
A a={};
}
// output
// constructor 1
مثال 2 :
class B
{
public:
B(int){};
};
class C
{
public:
C(int){};
private :
C(){};
};
int main( )
{
B b={};//error chon default constructor nadarim
C c[3]={};//error chon default constructor be soorat private tarif shode va behesh dastresi nadarim
}
اگر برای کلاس سازنده تعریف نکرده باشین اعضایی که مقدار نگرفته باشن هر کدوم بسته به نوعشون مثدار می گیرین .
مثال :
struct S
{
int a;
};
class T
{
public:
T(){a=2;};
int a;
};
class D
{
public :
int a;
int b;// zaman meghdar dadan a(0) seda zade mishe
S s;//zaman meghdar dadan default constructor seda zade mishe
T t;//zaman meghdar dadan default constructor T seda zade mishe va t.a =2 mishe
};
int main( )
{
D d={1};
cout<<d.a;
cout<<d.b;
cout<<d.s.a;
cout<<d.t.a;
}
//output
// 1002
اگر از {} برای مقدار دادن به آرایه استفاده کنین اعضای آرایه بسته به نوعشون مقدار می گیرن (یعنی اگر آرایه از نوع کلاس باشه به همون شکلی که بالا گفتم ,...)
مثال :
int a[5]={1};
cout<<a[0]<<a[1]<<a[2];//output : 100
مثال 2 :
class B
{
public:
B(){c=2;};
B(int a){c=5;};
int c;
};
class A
{
public:
int a;
B b;
};
int main( )
{
A a[3]={ {1,7} ,{2} };
cout<<a[0].a<<" "<<a[0].b.c<<"\n";
cout<<a[1].a<<" "<<a[1].b.c<<"\n";
cout<<a[2].a<<" "<<a[2].b.c<<"\n";
}
// output
// 1 5
// 2 2
// 0 2
اگر از {} ّرای مقدار دادن به هیچ کدوم از مواردی که بالا گفتم استفاده نکنین بصورت پیش فرض 0 میگیره .
مثلا :
int a={};
cout<<a;//khorooji 0