O. X. Azamatov


 Obyektlarga ko‘rsatkichlar


Download 1.82 Mb.
Pdf ko'rish
bet58/119
Sana09.01.2022
Hajmi1.82 Mb.
#256439
1   ...   54   55   56   57   58   59   60   61   ...   119
Bog'liq
3072-Текст статьи-7829-1-10-20200908

 
6.2. Obyektlarga ko‘rsatkichlar 
Obyektlar aniqlangandan so‘ng shu obyektlarga ko‘rsatkichlar belgilash 
mumkin. Masalan: 
complex A(5.2,2.7); 
complex* PA=&A; 
Obyektning  umumiy  elementlariga  murojaat  uchun  ->  operatsiyani  yoki  ism 
almashtirish va nuqta operatsiyasidan foydalanish mumkin 
*PA.real() yoki PA->real; 
 
6.3. Sinf komponentlariga ko‘rsatkichlar 
Sinf  elementlariga  ko‘rsatkichlar  yordamida  murojat  etish  mumkin.  Buning 
uchun 
.*  i  ->*  amallari  aniqlangan.  Sinf  maydoniga  va  usullariga  ko‘rsatkichlar  har 
xil tartibda aniqlanadi. Sinf usuliga ko‘rsatkich shakli: 
turi (sinf_ismi::*ko‘rsatkich_ismi)(parametrlari); 
Masalan, monstr sinfiga ko‘rsatkichning yozilishi qo‘yidagicha 
int get_health() {return health;} 
int get_ammo( ) {return ammo;} 
//(xuddi shuningdek): 
int (monstr:: *pget)(); 
Bunday  ko‘rsatkichni  funksiya  parametri  sifatida  berish  mumkin  Bu  esa 
funksiyaga usul ismini berish imkonini beradi: 
void fun(int (monstr:: *pget)()){ 


57 
 
(*this.*pget)();//  .* amali orqali funksiyani chaqirish 
(this->*pget)();// ->* amali orqali funksiyani chaqirish 

Ko‘rsatkichni adresni olish orqali aniq bir usulga biriktirish ham mumkin: 
//Ko‘rsatkich qiymatini o‘zlashtirish: 
pget=&monstr::get_health; 
monstr Vasia.*p; 
p = new monstr; 
// .* amali orqali funksiyani chaqirish: 
int Vasin.health - (Vasia.*pget)(); 
// ->* amali orqali funksiyani chaqirish: 
int p_heaUh = (p->*pget)(); 
Qo‘yida  sinflarning  usullariga  ko‘rsatkichlardan  foydalanish  qoidalari 
ko‘rsatilgan: 
­  Usulga  ko‘rsatkich,  faqat  mos  sarlavhaga  ega  bo‘lgan  usullar  adresi 
o‘zlashtirilishi mumkin.   
­  Sinfning statik usuliga ko‘rsatkichni aniqlash mumkin emas. 
­  Oddiy  funksiyaga  ko‘rsatkichni  usuulga  ko‘rsatkichga  almashtirish  mumkin 
emas. 
Oddiy funksiyaga ko‘rsatkich kabi usullarga ko‘rsatkich ismi noma’lum usullar 
hosil  bo‘lgandagina  uni  chaqirish  uchun  qo‘llaniladi.  Usulga  ko‘rsatkich, 
o‘zgaruvchiga  ko‘rsatkich  yoki  oddiy  funksiyaga  ko‘rsatkichdan  farqi,  usulga 
ko‘rsatkich xotiraning aniq adresiga murojaat etmaydi.  
U  massivning  indeksiga  o‘xshab  ketadi.  Xotiraning  aniq  adresi  usulga 
ko‘rsatkich bilan ma’lum obyektga ko‘rsatkichlar orqali amalga oshiriladi. 
Sinf maydoniga ko‘rsatkich shakli: 
ma’lumotlar_turi(sinf_ismi::*ko‘rsatkich_ismi); 
Ko‘rsatkichni  aniqlashda  uni  initsializatsiyalashtirish  shaklida  ham  berish 
mumkin: 
&sinf_ismi::maydon_ismi;// maydon public bo‘lishi kerak 


58 
 
Agar  health  maydoni  public  kabi  aniqlanganda,  uning  ko‘rsatkichi  quyidagi 
shaklda bo‘lar edi: 
int (monstr::*phealth)=&monstr::health: 
cout « Vasia.*phealth; //.* amali orqali murojaat etish 
cout « p->*phealth; // ->* amali orqali murojaat etish 
Bu  yerda  shunga  e’tibor  etish  kerakki  sinflarning  maydoniga  ko‘rsatkichlar 
oddiy  ko‘rsatkichlar  bo‘lmaydi,  chunki  qiymat  o‘zlashtirilayotganda  ular  xotiraning 
ma’lum adresiga murojaat etmaydi.  
Xotira sinflar uchun emas balki sinf obektlari uchun ajratiladi.     
 

Download 1.82 Mb.

Do'stlaringiz bilan baham:
1   ...   54   55   56   57   58   59   60   61   ...   119




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