8-BOB
Tiplarni almashtirish
Dasturni bajarishda miqdorlarni bir tipdan ikkinchisiga oshkor va oshkormas almashtirishlar amalga oshiriladi. C++ tilida oshkor almashtirishlarni bajarish uchun amallar guruhi const_cast, dynamic_cast, reinterpret_cast va static_cast hamda C tilda meros qilingan tipni keltirish amali mavjud.
C uslubida tiplarni keltirish amali
Amal ikki shaklda yozilishi mumkin:
tip (ifoda)
(tip) ifoda
Amal natijasi bo’lib, berilgan tipdagi qiymat hisoblanadi, masalan:
int а = 2;
float b = 6.8;
printf(“%f %d’, double (a), (int) b);
a miqdor double tipiga, b o’zgaruvchi kasr qismini qirqishga ega int tipiga o’tkaziladi, ikkala holda almashtirish amali natijasini tasvirlashning ichki shakli berilgan qiymat shakliga qaraganda boshqacharoq.
Tipni almashtirish zarurati masalan, funksiya u bilan keyinchalik qandaydir amalni bajarish uchun konkret tipdagi o’zgaruvchi berish talab etiladigan void tipiga ko’rsatgichni qaytaradigan holda paydo bo’ladi:
float *q = (float *) malloc(100 * sizeof(float));
Tipni oshkora almashtirish sodir bo’lishi mumkin bo’lgan xatolar manbai hisoblanadi. Chunki uning natijasi uchun butun ma’suliyat dasturchiga yuklanadi. Shuning uchun C++da bajariladigan almashtirishlarni qisman nazorat qilishga yoki dasturchining maqsadlarini tushinish uchun oshkora qilishga imkon beruvchi amallar kiritilgan. Yuqorida qaralgan C uslubdagi almashtirish C++da faqat quyi muvofiqlik uchun qoldirilgan va ularni foydalanish tavsiya etilmaydi. Talab qilingan almashtirish turiga bog’liq ravishda unga mos keluvchi tipga keltirish amalini foydalanish zarur.
const_cast amali
Amal const modifikatorini yo’qotish uchun xizmat qiladi. Odatda u const modifikatoriga ega bo’lmagan formal parameter o’rniga konstant ko’rsatgich funksiyasiga uzatishda qo’llaniladi. Amal formati:
const_cast (ilova)
Belgilangan tip const modifikatorda boshqa ifoda tipi kabi bo’lishi mumkin. Bu ko’rsatgich odatiy. Amal ko’rsatilgan tipdagi natijani shakllantiradi.
Bu amalni kiritish zarurati funksiyani amalga oshiruvchi dasturchi undagi o’zgarmaydigan const kabi formal parametrlarni tavsiflashi shart emasligidan kelib chiqadi, vaholanki bu tavsiya etiladi. C++ qoidalari konstant ko’rsatgichni odatdagisi o’rniga uzatishni man etadi. const_cast amali bu cheklovni chetlab o’tish uchun kiritilgan. Tabiiyki, funksiya uzatilayotgan ko’rsatgich murojaat qiladigan qiymatni o’zgartishga harakat qilmasligi lozim, aks holda dasturni bajarish natijasi aniqlanmagan bo’ladi.
Misol:
void print(int *р){ // Funksiya *p qiymatni o’zgartirmaydi
cout << *р;
}
const int *р;
…
/* print(p); Xato, chunki p konstantan ko’rsatgich sifatida e’lon qilingan */
const_cast amali dasturchi funksiya tanasida ko’rsatgich murojaat qiluvchi qiymat o’zgarmaydi. Tabiiyki, agar formal parameter tavsifiga const modifikatorini qo’shish imkoniyati bo’lsa, bu funksiyani chaqirishda tipni almashtirishdan foydalanishga nisbatan afzalroq.
Do'stlaringiz bilan baham: |