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


Download 1.96 Mb.
Pdf ko'rish
bet36/83
Sana08.11.2023
Hajmi1.96 Mb.
#1757524
1   ...   32   33   34   35   36   37   38   39   ...   83
Bog'liq
Obyektga yo`naltirilgan dasturlash tillari

 
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.96 Mb.

Do'stlaringiz bilan baham:
1   ...   32   33   34   35   36   37   38   39   ...   83




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