51
Birinchi usulda parametrlar qiymatlari konstruktor tanasiga uzatiladi. Ikinchi
usulda esa ushbu sinfdagi initsializatorlar ro‘yxatidan foydalanish nazarda tutilgan.
Bu ro‘yxat parametrlar ro‘yxati va konstruktor tanasi orasiga joylashadi.
Sinfning biror obyekti uchun ajratilgan xotira obyekt yo‘qotilgandan so‘ng
bo‘shatilishi lozimdir. Sinflarning maxsus komponentalari destruktorlar, bu vazifani
avtomatik bajarish imkonini yaratadi. Destruktorni standart shakli quyidagicha:
~
( ) {}
Destruktor parametri yoki kaytariluvchi qiymatga ega bo‘lishi mumkin emas
(xatto void tipidagi). Dastur obyektni o‘chirganda destruktor avtomatik chaqiriladi.
Agarda sinfda destruktor ochiq ko‘rsatilmagan bo‘lsa, unda kompilyator
ko‘rsatilgan obyekt egallagan xotirani bo‘shatuvchi destruktorni generatsiyalaydi.
Boshqa obyektlar egallagan xotirani bo‘shatmoqchi bo‘lsak, destruktorni ochiq
aniqlash lozim. Masalan, string obyektdagi ch ko‘rsatgan saxifani
“Simvol satri” sinfi.
class string
{
char *ch; // matnli satriga ko‘rsatkich
int len; // matnli satrni uzunligi
public:
// konstruktorlar
// bo‘sh satr – obyektni yaratish
string(int N = 80): len(0){ch = new char[N+1]; ch[0] = ‘\0’;}
// berilgan satr bo‘yicha obyekt yaratadi
string(const char *arch){len = strlen(arch);
ch = new char[len+1]; strcpy(ch,arch);}
// funksiyalar – komponentlar
// murojaatni satr uzunligiga qaytaradi
int& len_str(void){return len;}
// ko‘rsatkichni satrga qaytaradi
char *str(void){return ch;}
52
//Nusxa olish klnstruktori
string(const string& st)
{len=strlen(st.len);
ch=new char[len+1];
strcpy(ch,st.ch); }
//Destruktor
~string(){delete []ch;}
. . .};
Dostları ilə paylaş: