Sinf tushunchasi. Konstruktor va destruktor. Sinf statik komponentlari. Sinflarda ko‘rsatkichlar


Download 26.9 Kb.
bet4/4
Sana17.06.2023
Hajmi26.9 Kb.
#1544666
1   2   3   4
Bog'liq
Sinf va const o\'zgaruvchilar Tojiyev Feruzbek

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)()){
(*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
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 26.9 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




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