Samarqand davlat universiteti matematika fakulteti amaliy
Download 16.38 Kb.
|
azamat
SHAROF RASHIDOV NOMIDAGI SAMARQAND DAVLAT UNIVERSITETI MATEMATIKA FAKULTETI AMALIY MATEMATIKA YO’NALISHI KECHKI 209-GURUH TALABASI NURILLAYEV XURSHIDNING PROGRAMMALASH ASOSLARI FANIDAN MUSTAQIL ISHI Ma'lumotlar turini o'zgartirish operatorlarini qo'shimcha yuklash C++ da haddan tashqari yuklangan ma'lumotlar turini o'zgartirish operatorlari sinfga uni qanday qilib boshqa ma'lumotlar turiga aylantirish kerakligini aniqlash imkonini beradi. Ma'lumotlar turini o'zgartirish operatorini ortiqcha yuklash uchun usul nomi sifatida operator kalit so'zidan keyin maqsadli ma'lumotlar turi ishlatiladi. Masalan, MyClass nomli sinfni int turiga aylantirish uchun biz sinf ichida quyidagi usulni belgilashimiz mumkin: class MyClass { public: operator int() const {} }; Bu MyClass misolida int kutilayotgan kontekstlarda, masalan, matematik hisob-kitoblarda foydalanish imkonini beradi. Shuni ta'kidlash kerakki, ma'lumotlar turini o'zgartirish operatorlarini haddan tashqari yuklashdan ehtiyotkorlik bilan foydalanish kerak, chunki bu kutilmagan xatti-harakatlarga olib kelishi va kodni tushunishni qiyinlashtirishi mumkin. Dastur orqali misol #include using namespace std; class Fut { private: double fut; public: Fut(double f) { fut = f; } operator double() const { return fut / 3.28084; } }; int main() { Fut f(100.0); double metr = f; cout << "100 fut " << metr << " metrga teng." << endl; return 0; } Dastur natijasi 100 fut 30.48 metrga teng. Ajdod sinf metodlarini qayta aniqlash Obyektga yo'naltirilgan dasturlashda siz ajdod sinflaridan birida allaqachon aniqlangan pastki sinfdagi usulni qayta belgilashingiz mumkin. Ushbu jarayon usulni bekor qilish deb ataladi. Bu quyi sinfga oʻziga xos usulni amalga oshirish imkonini beradi, bu esa quyi sinfning xatti-harakatlariga xos boʻlishi mumkin. Usulni bekor qilish uchun bola sinfidagi usul ota-sinfdagi usul bilan bir xil imzoga (nom va parametr turlari) ega bo'lishi kerak. Bola sinfidagi usul uchun kirish spetsifikatori ota-sinfdagi usul uchun kirish spetsifikatoriga qaraganda bir xil yoki ko'proq ruxsat beruvchi bo'lishi kerak. Dastur orqali misol #include using namespace std; class Hayvon { public: virtual void hayvonovozi() { cout << "Hayvon nomi va ovozi quyidagicha: " << endl; } }; 100 fut 30.48 metrga teng. class It : public Hayvon { public: void hayvonovozi() override { cout << "Bu it va uning ovozi vovf" << endl; } }; int main() { Hayvon ovoz; ovoz.hayvonovozi(); It kuchuk; kuchuk.hayvonovozi(); return 0; } Dastur natijasi Hayvon nomi va ovozi quyidagicha: Bu it va uning ovozi vovf Yuqoridagi dasturda Hayvon{} sinfidagi hayvonovozi() funksiyasi virtualdir, bu uni It{} sinfida bekor qilishga imkon beradi. It{} sinfidagi override kalit so' zi ota sinfdagi usulni bekor qilishini bildiradi. hayvonovozi() funksiyasi It misolida chaqirilganda, u Hayvon{} sinfidagi kodni emas balki It{} sinfidagi kodni bajaradi. Ajdod sinf metodlarini yashirish Ajdod sinfdagi metodlarni yashirish uchun private kalit sozi ishlatiladi. Private kalit sozida elon qilingan metodlarni nafaqat meros olingan sinflarda balki dasturni int main qismida ham qo’llab bo’lmaydi. Private kalit so’zida elon qilingan metodlar faqat elon qilingan sinfni ichida ishlaydi. Dastur orqali misol Hayvon nomi va ovozi quyidagicha: Bu it va uning ovozi vovf #include using namespace std; class mashina { private: string rangi; int yili; public: mashina(string a, int b) { rangi=a; yili=b; } void chiqar() { cout << "Mashina rangi: " << mashina::rangi << "\n"; cout << "Mashina yili: " << mashina::yili << "\n" ; } }; class Yukmashina: public mashina { private: int ogirlik_kuchi; string massa; public: Yukmashina(int d, string c): mashina("qora",2022) { ogirlik_kuchi=d; massa=c; } void chiqar() { cout << "Mashinaning og'irlik ko'tara olish darajasi: " << ogirlik_kuchi << " " << massa << "\n"; } }; int main() { mashina Yuk("qora", 2022); Yuk.chiqar(); Yukmashina Kamaz(5000,"kg"); Kamaz.chiqar(); return 0; } Dastur natijasi Mashina rangi: qora Mashina yili: 2022 Mashinaning og'irlik ko'tara olish darajasi: 5000 kg Ko'plikdagi merosxo'rlik Ko'plikdagi merosxo'rlik ob'ektga yo'naltirilgan dasturlashning xususiyati bo'lib, sinf ikki yoki undan ortiq ota-sinflarning xatti-harakatlari va atributlarini meros qilib olishi mumkin. Bu kodni ko'proq qayta ishlatish imkonini beradi va murakkab tizimlar dizaynini yaxshilashga yordam beradi. Biroq, bu, shuningdek, olmos muammosi kabi muammolarga olib kelishi mumkin, bu erda bir nechta otaMashina rangi: qora Mashina yili: 2022 Mashinaning og'irlik ko'tara olish darajasi: 5000 kg ona sinflari umumiy ajdodga ega va merosni qanday hal qilishda nizolar paydo bo'ladi. Dastur orqali misol #include using namespace std; class Shakl { public: double yuza; virtual void yuzani_hisoblash() = 0; }; class Rang { public: string rang; }; class Tortburchak : public Shakl, public Rang { public: Tortburchak(double w, double h, string c) { eni = w; buyi = h; rang = c; } void yuzani_hisoblash() { yuza = eni * buyi ; } void Shakl_xususiyatlari() { cout << "Eni " << eni << endl; cout << "Bo'yi " << buyi << endl; cout << "Yuzasi: " << yuza << endl; cout << "Rangi: " << rang << endl; } private: double eni,buyi; }; int main() { Tortburchak T(5.0, 10.0, "qizil"); T.yuzani_hisoblash(); T.Shakl_xususiyatlari(); return 0; } Dastur natijasi Eni 5 Bo'yi 10 Yuzasi: 50 Rangi: qizil Download 16.38 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling