Tiplarni dinamik tarzda aniqlash. Reja: Tiplarni dinamik tarzda aniqlash

|
Tiplarni dinamik tarzda aniqlash. Reja: Tiplarni dinamik tarzda aniqlash
|
bet | 1/143 | Sana | 20.07.2024 | Hajmi | 0,81 Mb. | | #268096 |
Bog'liq Tiplarni dinamik tarzda-fayllar.org
Tiplarni dinamik tarzda
Tiplarni dinamik tarzda aniqlash.
Reja:
Tiplarni dinamik tarzda aniqlash.
Tiplarni almashtirish operatorlari.
Yangi nomlar fazosi yaratish.
Buferlashtirilgan kiritish va chiqarish.
Kalit so’zlar: Tipni aniqlash, tipni almashtrish, nomlar fazosi, buferlashtirilgan kirish va chiqish, typeid, typeinfo, type_info sinfi, dynamic_cast, const_cast, static_cast, reinterpret_cast, namespace, istrstream, oqim, formatlash identifikatori, monupulyatorli formatlash.
Nomaʻlum tiplar va nomaʻlum fazolar uchun dinamik tipni aniqlash va tipini almashtirish operatorlari zamonaviy obʻyektga yo‘naltirilgan dasturlashni qo‘llab- quvvatlovchi C++ dasturlash tilining ikkita vositalari: dinamik tipni aniqlash (runtime type identification - RTTI) va qo‘shimcha tip quyish operatorlari bilan bog‘liq. Bu vositalarning biri C++ spesifikatsiyasi qismi emasdi, lekin har ikki runtime polimorfizm uchun qo‘llab-quvvatlash oshirish uchun qo‘shilgan. RTTI dastur bajarish davomida obʻyekt turini aniqlash imkoniyati muvjudligini bildiradi. Bunda muhokama qilinayotgan tip turi tashlash operatorlari - bu amalni bajarish uchun dasturchiga xavfsiz yo‘llarini taklif qiladi. Ulardan biri, dynamic_cast, bevosita RTTI aniqlash bilan bog‘liq.
Tiplarni dinamik tarzda aniqlash. Ushbu vosita polimorf bo‘lmagan tillarda (masalan, C ) mavjud emasligi sababli dinamik turdagi identifikatsiyalash bilan tanish bo‘lmasligigiz mumkin, chunki har bir obʻyektning tipi kompilyatsiya vaqtida (yaʻni, dasturni bajarishda) maʻlum bo‘lgani uchun dastur bajarilishida maʻlumot olishning hojati yo‘q. Biroq, C++ kabi polimorf tillarda obʻyekt tipi kompilyatsiya vaqtida nomaʻlum bo‘lgan holatlar bo‘lishi mumkin, chunki dastur bajarila boshlagunga qadar bu obʻyektning aniq tipi (tiplari) aniqlanmaydi. Maʻlumki, C++ sinf ierarxiyasi, virtual funksiyalar va ko‘rsatkichlarni (pointer) asos sinflarga ishlatib polimorfizmni amalga oshiradi. Tayanch sinfga ko‘rsatkich bu tayanch sinf aʻzolariga yoki undan olingan har qanday obʻyekt aʻzolariga
murojaat qilish uchun foydalanish mumkin. Shuning uchun asos sinfga ko‘rsatgichning istalgan vaqtda qanday turdagi obʻyektga murojaat qilishi har doim ham oldindan maʻlum emas. Bu faqat dastur ishlayotganida — dinamik turdagi identifikatsiya vositalaridan biri yordamida aniqlanadi.
Dastur bajarilishi davomida obʻyekt turini olish uchun typeid operatoridan foydalaniladi.
Dastur bajarilayotgan vaqtda obʻyekt tipini olish uchun kutubxonasini kiritish va typeid operatoridan foydalanish mumkin. Typeid operatoridan foydalanishning eng keng tarqalgan yozilish sintaktisi quyidagicha:
typeid(object)
Bunda, object element tipini olish uchun obʻyekt anglatadi. Shuningdek, nafaqat ichki tipini, balki dasturchi tomonidan yaratilgan sinf tipini ham aniqlash mumkin. Buning uchun typeid operatori obʻyekt tipini tasvirlaydigan type_info obʻyektiga murojaat qiladi.
type_info sinfda public modifikatori bilan quyidagi statik operatorlar aniqlangan bo‘ldi.
|
| |