Kitob uchta qismdan iborat. "Strukturali dasturlash", "Obyektli-yo’nalishli dasturlash", "Standart kutubxonalar"



Download 333,2 Kb.
bet70/90
Sana10.07.2022
Hajmi333,2 Kb.
#770437
1   ...   66   67   68   69   70   71   72   73   ...   90
Bog'liq
C majmua

Vertual usullar
Obyektlar bilan ishlash ko’proq ko’rsatgichlar orqali amalga oshiriladi. Bazaviy sinfga ko’rsatgichi ixtiyoriy hosila sinf obyekti manzili qiymatini berish mumkin, masalan:

// Bazaviy sinfga ko’rsatgich tavsiflanadi:


monstr *p;
// Ko’rsagich sinf obyektiga murojaat etadi:
p = new daemon;

Obyektlar usullarini chaqirish ko’rsatgich murojaat qilayotgan obyekt haqiqiy tipiga emas, balki ko’rsatgich tipiga mos ravishda ro’y beradi, shuning uchun operatorni bajarishda, masalan:


p->draw(1, 1, 1, 1);
daemon sinfi usuli emas, monstr sinfi usuli chaqiriladi, chunki usullarga murojaatlar dasturni sozlashda ruxsat beriladi. Bu jarayon ertachi bog’lanish deb ataladi. daemon sinfi usulini chaqirish uchun ko’rsatgich tipini oshkora almashtirishdan foydalanish mumkin:
(daemon * p)->draw(1, 1, 1, 1);
Bu hamma vaqt mumkin bo’lmaydi, chunki turli paytda ko’rsatgich shajaraning turli sinflari obyektlariga murojaat etishi mumkin va dasturni kompilyatsiya qilishda konkret sinf noma’lum bo’lishi mumkin. Misol sifatida parametri bazaviy sinf obyekti ko’rsatgichdan iborat funksiyani keltirish mumkin. Uning o’rniga dastur bajarish paytida ixtiyoriy hosila sinfga – bir xil tarzda ishlash talab etiladigan shajaraning turli obyektlariga ko’rsatgichlarning bog’lanish ro’yxati.
C++ da kechki bog’lanish mexanizmi yo’lga qo’yilgan, bunda usulga murojaatlarga ro’xsat usulni chaqirgan obyektning konkret tipiga bog’liq ravishda dasturni bajarish bosqichida ro’y beradi. Bu mexanizm virtual usullar bilan amalga oshiriladi.
Virtual usullarni aniqlash uchun virtual spetsifikatori ishlatiladi, masalan:
virtual void draw(int x, int y, int scale, int position);
Virtual usullarni tavsiflash va foydalanish qoidalarini qaraymiz:

  • Agar bazaviy sinfda o’sha nom va o’sha parametrlar shajarasi bilan hosila sinfda aniqlangan virtual usul kabi aniqlangan bo’lsa, avtomatik ravishda virtual bo’ladi, agar farq qiluvchi parametrlar majmuasiga ega bo’lsa – oddiy usul bo’ladi.

  • Vertual usullar vorislanadi, ya’ni ularni hosila sinfda qayta aniqlash faqat farq qiluvchi amallarni berish zarurati bo’lganda talab etiladi. Qayta aniqlashda kirish huquqini o’zgartirish mumkin emas.

  • Agar virtual usul hosila sinfida qayta aniqlangan bo’lsa, bu sinfning obyektlari ko’rinish sohasiga kirish amali yordamida bazaviy sinf usuliga kirishga ega bo’lishi mumkin.

  • Vertual usul static modifikatori bilan e’lon qilinishi mumkin emas, lekin do’stona sifatda e’lon qilinadi.

  • Agar sinfda virtual usul tavsifi kiritilsa, u hech bo’lmaganda sof virtual sifatida aniqlanishi lozim.

Sof virtual usul jism o’rnida = 0 belgisi o’z o’rniga oladi, masalan:


virtual void f(int) = 0;
Sof virtual usul hosila sifatida qayta aniqlanishi lozim (yani faqat sof virtual kabi).
Agar monstr sinfida draw usulini virtual usul kabi aniqlansa, qanday sinfning usulini chaqirish haqidagi qaror ko’rsatgichiga murojaat qiluvchi obyekt tipiga bog’liq ravishda qabul qilinadi.

monstr *r, *р;


r = new monstr; // monstr sinfi obyekti yaratiladi
р = new daemon; // daemon sinfi obyekti yaratiladi
r->draw(l, 1, 1, 1); // monstr::draw usuli chaqiriladi
p->draw(l, 1, 1, 1); // daemon::draw usuli chaqiriladi
р-> monstr::draw(1, 1, 1, 1); // Vertual usullar mexanizmini chetlab o’tish

Agar daemon sinfi obyekti draw usulini bevosita emas, bilvosita chaqirsa (ya’ni monstr sinfida aniqlangan boshqa usuldan) daemon sinfining draw usuli chaqiriladi.


Demak, virtual usul deb dastur bajarilish bosqichida unga murojaat ruxsat beriladigan usulga aytiladi (virtual inglizcha so’zining tarjimasi – bu holatda “haqiqiy”, ya’ni murojaatga chaqirish haqiqiy bo’lganda ruxsat beriladi).



Download 333,2 Kb.

Do'stlaringiz bilan baham:
1   ...   66   67   68   69   70   71   72   73   ...   90




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish