5-ma’ruza. Konstruktorlar va destruktorlar. A’zo o’zgaruvchilarni
initsializatsiyalash
1. Konstruktorlar va destruktorlar
Agar sinfning (yoki strukturaning) barcha a'zolari ochiq bo‘lsa, biz sinfni
(yoki strukturani) to‘g‘ridan-to‘g‘ri boshlang‘ich ro‘yxati
yoki bir xil
initsializatsiya (C ++ 11 da) yordamida initsializatsiyalashimiz mumkin:
class Boo
{
public:
int m_a;
int m_b;
};
int main()
{
Boo boo1 = { 7, 8 }; // initsializatorlar ro‘yxati
Boo boo2 { 9, 10 }; // uniform-initsializatsiya (C++11)
return 0;
}
Ammo, agar biz sinfning har qanday o‘zgaruvchisini
xususiy qilsak,
ularni to‘g‘ridan-to‘g‘ri initsializatsiyalay olmaymiz.
Bu yerda, agar
o‘zgaruvchiga to‘g‘ridan-to‘g‘ri kira olmasangiz (chunki u xususiy bo‘lsa), uni
to‘g‘ridan-to‘g‘ri initsializatsiya qila olmaysiz, degan mantiqiy fikr mavjud.
Xususiy a'zo o‘zgaruvchilari bo‘lgan sinfni
konstruktorlardan
foydalangan holda initsializatsiyalash mumkin.
Konstruktor - bu bir xil sinfdagi obyekt yaratilganda avtomatik ravishda
chaqiriladigan sinf metodining maxsus turi.
Konstruktorlar, odatda,
standart / foydalanuvchi tomonidan berilgan qiymatlarga ega bo‘lgan sinf
a'zolarining o‘zgaruvchilarini initsializatsiyalash
yoki ishlatilayotgan sinf
uchun zarur bo‘lgan konfiguratsiya bosqichlarini bajarish uchun ishlatiladi
(masalan, ma'lum bir fayl yoki ma'lumotlar bazasini ochish).
Oddiy metodlardan farqli o‘laroq, konstruktorlar
ularni nomlashning
ma'lum qoidalariga ega:
- Konstruktorlar har doim sinf bilan bir xil nomga ega bo‘lishi
kerak
(katta va kichik harflar hisobga olinadi);
- Konstruktorlar qaytish turiga ega emas (hatto void ham emas).
E'tibor bering, konstruktorlar faqat initsializatsiya uchun mo‘ljallangan.
Mavjud obyektni qayta tiklash uchun konstruktorni chaqirishga urinmaslik
kerak. Bu xatosiz kompilyatsiya qilinishi mumkin bo‘lsa-da,
natijalar
kutilmagan bo‘lishi mumkin (kompilyator vaqtinchalik
obyekt yaratadi va
keyin uni o‘chiradi).