polimorfizm, undan foydalanish mexanizmlari

PPTX 46 pages 1.3 MB Free download

Page preview (5 pages)

Scroll down 👇
1 / 46
презентация powerpoint 9-ma’ruza. polimorfizm, undan foydalanish mexanizmlari ko’rsatkichlar, havolalar, merosxo’rlik oldingi darslarda biz mavjud sinflardan yangi sinflarni olish uchun merosdan foydalanishni ko’rib chiqdik. ushbu mavzudagi darslarda biz merosning eng muhim va kuchli jihatlaridan biri - virtual funksiyalarga e’tibor qaratamiz. ko’rsatkichlar, havolalar va avlod sinflari. oldingi darslardan bilamizki, avlod sinfining obyektini yaratishda ushbu obyektni tashkil etuvchi ikkita qism qurilgan: ajdod va avlod. masalan: class parent { protected: int m_value; public: parent(int value) { m_value = value; } const char* getname() { return "parent”; } int getvalue() { return m_value; } }; class child: public parent { public: child(int value) : parent(value) { } const char* getname() { return "child”; } int getvaluedoubled() { return m_value * 2; } }; child sinfining obyektini yaratishda avval ajdod qismi, keyin esa child qismi quriladi. child sinfining ko’rsatkichlari va havolalariga child sinfining boshqa obyektlarini ko’rsatishni buyurishimiz mumkin: int main() { child child(7); cout getname() getvalue() …
2 / 46
unday deyishingiz mumkin: “yuqoridagi misollar g’alati tuyuladi. nega men faqat kichik ob’ektdan foydalanishim mumkin bo’lsa, men ajdod-sinf ko’rsatkichidan yoki avlod sinf ob’ektiga havoladan foydalanishim kerak? ” buning bir qancha yaxshi sabablari bor ekan. birinchidan, siz hayvonning nomi va tovushini chiqaradigan funksiyani yozmoqchisiz deylik. ajdod-sinfga ko’rsatkich ishlatmasdan, funksiyani ortiqcha yuklash orqali buni amalga oshirishingiz kerak. masalan: void report(cat &cat) { cout #include using namespace std; class animal { protected: string m_name; // biz ushbu konstruktorni himoyalangan qilamiz, //chunki biz foydalanuvchilarning animal sinfi obyektlarini to'g'ridan-to'g'ri //yaratishini xohlamaymiz, lekin biz avlod sinflariga kirish huquqiga ega bo’lishini xohlaymiz. animal(string name) { mname = name; } public: string getname() { return m name; } const char* speakq { return "???"; } class cat: public animal { public: cat(string name) : animal(name) { } const char* speakq { return "meow"; } class dog: public animal { public: dog(string name) : animal(name) { } const char* speak() …
3 / 46
qdorini kamaytirdi. yuqorida biz bir qator misollarni ko’rib chiqdik, ularda ajdod sinfning ko’rsatkichlari yoki havolalaridan foydalanish mantiqni soddalashtirdi va kod miqdorini kamaytirdi. virtual funksiyalar va polimorfizm. biroq, biz muammoga duch keldik, bunda ajdod ko’rsatkichi yoki havolasi faqat ajdod metodlarini chaqiradi, avlodni emas. masalan: #include class parent { public: const char* getname() { return "parent”; } }; class child: public parent { public: const char* getname() { return "child”; } }; int main() { child child; parent &rparent = child; std::cout class parent { public: virtual const char* getname() { return "parent”; } // gobabunu karoueboe caobo virtual class child: public parent { public: virtual const char* getname() { return "child”; } }; int main() { child child; parent &rparent = child; std::cout using namespace std; class a { public: virtual const char* getname() { return "a”; } }; class b: public a { public: virtual const char* getname() { return …
4 / 46
blic: dog(string name) : animal(name) { } virtual const char* speak() { return "woof"; } void report( animal &animal) { cout« animal.getname() « "" } int main() { cat cat(mmatrosm); dog dog(mbarsikm); report(cat); report(dog); } dastumi bajarish natijasi: matros miyav deydi barsik vuf deydi bu ishladi! animal.speak() ni qayta ishlashda kompilyator animal::speak() virtual funksiya ekanligini ko’radi. animal cat obyektining animal qismiga murojaat qilganda, kompilyator eng katta avlod speak() metodini topish uchun animal va cat o’rtasidagi barcha sinflardan o’tadi va u cat::speak() ni topadi. animal dog obyektining animal qismiga murojaat qilganda, kompilyator dog::speak() ni topadi. e’tibor bering, biz animal::getname() ni virtual funksiyaga aylantirmaganmiz. buning sababi, getname () hech qachon avlod sinflarida qayta aniqlanmaydi, shuning uchun bu shart emas. xuddi shunday hayvonlar massivi bilan quyidagi misolda: int main() { cat matros(”matros”), ivan(”ivan”), martun(”martun”); dog barsik(”barsik”), tolik(mtolikm), tyzik(mtyzikm); animal *animals[] = { &matros, &barsik, &ivan, &tolik, &martun, &tyzik}; for (int iii=0; iii getname() …
5 / 46
ktlarini yarata olmaymiz, //lekin tajriba uchun buni mumkin deb tasavvur qiling. parent.getvalue(); // bu kod qatorining natijasi nima? } biz getvalue() metodini aniqlamaganimiz uchun parent.getvalue() natijasi qanday? ikkinchidan, mavhum ajdod-sinfning barcha avldo sinflari barcha sof virtual funktsiyalarni qayta aniqlashi kerak, aks holda ular ham mavhum sinflar hisoblanadi. sof virtual funktsiyaga misol. amaliyotda sof virtual funksiyaning misolini ko’rib chiqamiz. oldingi darslardan birida biz animal ajdod sinfini va cat va dog avlod sinflarini yaratdik: #include #include using namespace std; class animal { protected: string m_name; animal(string name) { m_name = name; } public: string getname() { return m_name; } virtual const char* speak() { return "???"; } }; class cat: public animal { public: cat(string name) : animal(name) { } virtual const char* speak() { return "meow”; } class dog: public animal { public: dog(string name) : animal(name) { } virtual const char* speak() { return "woof"; } }; konstruktorni himoyalangan qilib, …

Want to read more?

Download all 46 pages for free via Telegram.

Download full file

About "polimorfizm, undan foydalanish mexanizmlari"

презентация powerpoint 9-ma’ruza. polimorfizm, undan foydalanish mexanizmlari ko’rsatkichlar, havolalar, merosxo’rlik oldingi darslarda biz mavjud sinflardan yangi sinflarni olish uchun merosdan foydalanishni ko’rib chiqdik. ushbu mavzudagi darslarda biz merosning eng muhim va kuchli jihatlaridan biri - virtual funksiyalarga e’tibor qaratamiz. ko’rsatkichlar, havolalar va avlod sinflari. oldingi darslardan bilamizki, avlod sinfining obyektini yaratishda ushbu obyektni tashkil etuvchi ikkita qism qurilgan: ajdod va avlod. masalan: class parent { protected: int m_value; public: parent(int value) { m_value = value; } const char* getname() { return "parent”; } int getvalue() { return m_value; } }; class child: public parent { public: child(int value) : parent(value) { } const char* getname() {...

This file contains 46 pages in PPTX format (1.3 MB). To download "polimorfizm, undan foydalanish mexanizmlari", click the Telegram button on the left.

Tags: polimorfizm, undan foydalanish … PPTX 46 pages Free download Telegram