81
delete tmp.Str;
tmp.Str = new char[n2-n1+1];
strncpy(tmp.Str, Str+n1, n2-n1);
return tmp;
}
9.6. Qiymat berish va initsializatsiya
Qiymat berish va initsializatsiya turli amallardir.
Ayniqsa destruktor
aniqlanganda bu muximdir. Biror X tipidagi obyektni insializatsiya qilish nusxa olish
konstruktori yordamida amalga oshiriladi. Satr – bu simvollar vektoriga ko‘rsatkich.
Vektor konstruktor tomonidan yaratilib, destruktor bilan o‘chirilganda muammo
tug‘ilishi mumkin:
string s1(10);
string s2(20)
s1 = s2;
Bu yerda ikki
simvolli vektor joylashadi, lekin s1 = s2
qiymat berish natijasida
biri o‘chirilib, ikkinchisi nusxasi bilan almashtiriladi. Funksiyadan chiqishda s1 va s2
uchun destruktor chaqiriladi va bitta vektor ikki marta o‘chiriladi. Bu muammoni xal
qilish uchun qiymat berish amalini qo‘shimcha yuklash lozim:
string& string::operator=(const string& a)
{ if (this !=&a) { // opasno, kogda s=s
delete p;
p = new char[size=a.size];
strcpy(p,a.p);
}
return *this; }
Foydalanuvchi qiymat berish operatori initsializatsiya
qilinmagan obyektga
qo‘llanmaydi. Bu holda p ko‘rsatkich tasodifiy qiymatga ega bo‘ladi.
82
Initsializatsiya masalasini xal qilish uchun nusxa
olish konstruktori kiritish
lozim:
string::string(const string& a)
{ p=new char[size=sz];
strcpy(p,a.p); }
Do'stlaringiz bilan baham: