Sinflar elementlariga ko’rsatgichlar
Sinflar elementlariga ko’rsatgichlar yordamida murojaat qilish mumkin. Buning uchun .* va ->* amallar aniqlangan. Maydon va usullarga ko’rsatgichlar turlicha aniqlanadi.
Sinf usuliga ko’rsatgich formati quyidagicha bo’ladi:
qaytarish_tip (sinf_nomi::*ko’rsatgich_nomi)(parametrlar);
Masalan, monstr sinfi usuliga ko’rsatgichi tavsifi:
int get_health() {return health;}
int get_ammo() {return ammo;}
(bu sinfning boshqa usullariga shu signature bilan ko’rsatgich yoziladi) va quyidagi ko’rinishga ega:
int (monstr:: *pget)();
Bu ko’rsatgichni funksiya parametric sifatida berish mumkin. Bu funksiyaga usul nomini berish imkoniyatini beradi:
void fun(int (monstr:: *pget)()){
(*this.*pget)(); // .* amali orqali funksiyani chaqirish
(this->*pget)(); // ->* amali orqali funksiyani chaqirish
}
Ko’rsatgichni konkret usulga manzilni olish amali yordamida sozlash mumkin:
// Ko’rsatgich qiymatini berish:
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_health = (p->*pget)();
Quyida sinflar usullariga ko’rsatgichlardan foydalanish qoidalari sanab o’tilgan:
Usulga ko’rsatgichni faqat mos sarlavhaga ega bo’lgan usullar manzillari berishi mumkin.
Sinfning statistik usuliga ko’rsatgichni aniqlash mumkin emas.
Usulga ko’rsatgichni sinf elementi bo’lmagan oddiy funksiya ko’rsatgichiga almashtirish mumkin emas.
Oddiy funksiyalarga ko’rsatgichlar kabi usullarga ko’rsatgichlar nomi noma’lum bo’lgan usulni chaqirish zarurati paydo bo’lganda foydalaniladi. Lekin o’zgaruvchi yoki oddiy funksiyaga ko’rsatgichdan farqli usulga ko’rsatgich xotiraning ma’lum manziliga murojaat qilinmaydi. U massivdagi indeksga o’xshash, chunki siljishni beradi. Xotiradagi konkret manzil ma’lum obyektga ko’rsatgichli usulga ko’rsatgich bilan olinadi.
Sinf maydoniga ko’rsatgich:
ma'lumotlar_tipi(sinf_nomi:: *ko’rsatgich nomi);
Ko’rsatgich ta’rifiga uning В определение указателя можно включить его инициализацию в форме:
&sinf_nomi::maydon_nomi; // maydon public bo’lishi lozim
Agar health maydoni public kabi e’lon qilinishi mumkin bo’lganda unga ko’rsatgich ta’rifi quyidagi ko’rinishga ega:
int (monstr::*phealth) = &monstr::health;
cout << Vasia.*phealth; // .* amal orqali murojaat
cout << p->*phealth; // ->* amal orqali murojaat
Sinf maydonlariga ko’rsatgichlar oddiy ko’rsatgichlar emas – ularga qiymatlar berilganda ular xotiraning konkret manziliga murojaat qilmaydilar, chunki xotira sinflarga emas, sinflar obyektlarga ajratiladi.
Do'stlaringiz bilan baham: |