O‘zbekiston respublikasi oliy va o‘rta maxsus ta’lim vazirligi tоshkеnt dаvlаt iqtisоdiyot universitеti


Indekslash va funksiyani chaqirish amallarini qo‘shimcha yuklash


Download 1.96 Mb.
Pdf ko'rish
bet49/83
Sana08.11.2023
Hajmi1.96 Mb.
#1757524
1   ...   45   46   47   48   49   50   51   52   ...   83
Bog'liq
Obyektga yo`naltirilgan dasturlash tillari

9.5. Indekslash va funksiyani chaqirish amallarini qo‘shimcha yuklash
Dumaloq qavs () amalini qo‘shimcha yuklash sinf obyektiga funksiya chaqirig‘i 
sintaksisini qo‘llashga imkon beradi. Operandlar soni ixtiyoriy bo‘lishi mumkin. 
Kvadrat qavs massiv elementi sintaksisini qo‘llashga imkon beradi. 
//------ Simvolni ajratish amali ------------------- 
char string::operator()(int n) { if nelse return ‘\0’;} 
//------ Ostki satrni ajratish amali ------------------- 
string string::operator()(int n1, int n2) { 
string tmp = *this; 


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); } 

Download 1.96 Mb.

Do'stlaringiz bilan baham:
1   ...   45   46   47   48   49   50   51   52   ...   83




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling