Tiplarni dinamik tarzda


Tiplarni almashtirish operatorlari


Download 1.83 Mb.
bet7/131
Sana16.06.2023
Hajmi1.83 Mb.
#1503422
1   2   3   4   5   6   7   8   9   10   ...   131
Bog'liq
Tiplarni dinamik tarzda

Tiplarni almashtirish operatorlari. C++ tilida beshta tipni almatirish operatorlari mavjud.
Ulardan birinchisi bu odatdagi (anʻanaviy) uslubda ishlatiladigan [()](cast operatori) azaldan C++ga qurilgan. U quyidagicha ishlatiladi:
float f = (float)5;
bool b = (bool)5;
Tipni almatirish to‘rtta operatori (dynamic_cast, const_cast, reinterpret_cast va static_cast) 10 yil oldinC++ tilga qo‘shildi. Bu operatorlar tiplar bilan amallarni bajarganda tur xil imkoniyatlarni yaratib beradi Ularning har birini alohida ko‘rib chiqaylik.
Dynamic_cast operatori. Dynamic_cast operatori dastur bajarilishi davomida polimorf turdagi quyish amalini bajaradi. Yangi operatorlardan eng muhimi dynamic_cast tipidagi tip almashtirish (kasting, casting) operatoridir. Dasturni bajarish davomida taklif qilinayotgan amalning bajarilishini tekshiradi. Agar belgilangan amal chaqirilganda yaroqsiz bo‘lsa, hech qanday turdagi kasting amalga oshirilmaydi. Dynamic_cast operatorini qo‘llashning umumiy formati quyidagicha:
dynamic_cast (expr)
Bunda type elementi bu amalning maqsadi bo‘lgan yangi tipni, expr elementi esa bu yangi tipga almashadigan ifodani bildiradi. Tip turi ko‘rsatkich yoki mos yozuvlar bilan almashishi kerak va expr ifoda ko‘rsatkich yoki mos yozuvlar uchun tashlanishi kerak. Shu tarzda dynamic_cast operatoridan bir turdagi ko‘rsatgichni boshqa turdagi ko‘rsatgichga yoki bir turdagi murojaatni boshqa turdagi murojaatga aylantirish uchun foydalanish mumkin.
Bu operator asosan polimorf tiplar orasida dinamik tipni quyish amallari uchun ishlatiladi. masalan, agar polimorf sinflar B va D bo‘lsin. sinf D va sinf V olingach, dynamic_cast operatori yordamida, har doim ko‘rsatkichni Dga aylantirish mumkin. Chunki *in pointer* tayanch sinfga ko‘rsatkich har doim bazasidan olingan sinf obʻyektini ko‘rsatish uchun foydalanish mumkin. Biroq, dynamic_cast operatori faqat ko‘rsatkich aylantirishi mumkin. D obʻyekt ko‘rsatkich uchun murojaat qilinganda, albatta, sinf D obʻyekti bo‘ladi. Umuman olganda, dynamic_cast operatori faqat polimorf tipdagi kastingga ruxsat berilsa, muvaffaqiyatli bajariladi, yaʻni yangi tipdagi ko‘rsatikch ushbu yangi tipdagi obʻyektga yoki undan olingan obʻyektga havola qilishi mumkin. Aks holda, agar belgilangan tipdagi almashish amalini bajarib bo‘lmasa, bu amalda ko‘rsatgichlar ishtirok esa dinamic_cast operatorining natijasi null qiymatga aylanadi. Agar ushbu amalni bajarilishi muvaffaqitsiz bo‘lsa, uzilishlar ishtirok etgan bo‘lsa, bad_cast istisnosi avtomatik bajariladi. Oddiy misolni ko‘rib chiqamiz. Base asos sinfi polimorf sinf bo‘lsin va myClass sinf esa Base sinfidan olingan deb faraz qilaylik.

Download 1.83 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10   ...   131




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