1.4. Konstruktorlar
Key Point. Konstruktor ob’yektni yaratish uchun chaqiriladi.
Konstruktor – funksiyalarning alohida tipi bo`lib, quyidagi uch xususiyatga ega:
Konstruktor sinf nomi bilan bir xil bo`lgan nomga ega bo`lishi lozim;
Konstruktorlar qaytaruvchi tipga ega emas, hatto void ga ham;
Konstruktorlar ob’yekt yaratilishida chaqiriladi. Konstruktorlar ob’yektlarni yuklovchi vazifasini bajaradi.
Kontruktor aynan aniqlangan sinf bilan bir xil nomga ega bo`ladi. Boshqa funksiyalar kabi konstruktorlar ham turli ma’lumot turlari qiymatlarida ob’yektlarni konstruksiyalashni osonlashtirish uchun qayta yuklanishi mumkin (bunda bir nechta konstruktorlar bitta nom bilan, ammo turli belgilanishlar bilan keladi).
Ko`p hollarda yo`l qo`yilishi mumkin bo`lgan xatoliklardan biri – void kalit so`zining konstruktordan oldin qo`yilishidir. Masalan:
void Circle()
{
}
Ko`pgina C++ kompilyatorlar bu haqda xatolik beradi, leki ba’zilari buni konstruktor emas, oddiy funksiya sifatida o`qib ketadi.
Konstruktorlar ma’lumot maydonlarini yuklash uchun mo`ljallangan. Radius ma’lumotlar maydoni boshlang`ich qiymatga ega emas va shuning uchun ham u kontruktorda yuklanadi. Bir narsaga e’tiborni qaratish kerakki, o`zgaruvchi (local yoki global) bir operatorda e’lon qilinishi va yuklanishi mumkin, lekin sinf a’zosi sifatida, ma’lumotlar maydoni e’lon qilinganda uni qiymat bilan yuklab bo`lmaydi. Masalan, 1.1-kodli ro`yxatdagi 8-satrda bunday almashtirish xato bo`lar edi:
double radius = 5; // xato
Sinf odatda, konstruktorlarni argumentlarsiz taqdim etadi (masalan, Circle()). Bunday konstruktor argumentsiz konstruktor deb ataladi.
Sinf konstruktorlarsiz aniqlanishi mumkin. Bunday holatlarda sinfda bo`sh tanali argumentsiz konstruktorlar noaniq aniqlanadi. Ular odatga ko`ra konstruktor deb chaqiriladi. Faqat u sinfda noaniq aniqlangan bo`lsa, u avtomatik tarzda, konstruktor sifatida aniqlanadi.
Navbatdagi sintaksisga ko`ra, ma’lumotlar maydoni konstruktor tarkibida, yuklovchilar ro`yxatinidan foydalangan holda yuklanishi mumkin:
ClassName(parameterList)
: datafield1(value1), datafield2(value2) // yuklovchilar ro`yxati
{
// zarurligiga qarab qo`shimcha operatorlaar
}
Bu yerda yulovchilar ro`yxati datafield1 maydonini value1 bilan, datafield2 maydonini value2 bilan yuklaydi. Masalan,
Yuklovchilar ro`yxatini qo`llamagan (b) dagi konstruktor (a) dagi konstruktorga qaraganda ko`proq sezuvchan. Birgina argumentsiz konstruktorga ega bo`lmagan ob’yektning ma’lumotlar maydoni uchun yuklovchilar ro`yxati kerak bo`ladi.
Do'stlaringiz bilan baham: |