Dasturlash II
Laboratoriya ishi №:2 Tiplarni almashtirish operatorlari
Download 297.3 Kb.
|
Дастурлаш 2 Лаборатория иши 2021 (4)
Laboratoriya ishi №:2 Tiplarni almashtirish operatorlari.Ishning maqsadi: Kerakli jixoz va vositalar: Kompyuter, proyektor Nazariy ma’lumot. C++ tilida beshta tipni almashtirish operatorlari mavjud. Agar siz bir ma'lumot turidan ikkinchisiga, kattaroq (hajmi/diapazonda) o'zgartirishni xohlasangiz, yashirin konvertatsiya qilish yaxshi tanlovdir. Ammo ko'plab yangi dasturchilar ko'pincha quyidagi kabi narsalarni qilishga harakat qilishadi: float x = 11/3 ;. Biroq, 11 va 3 butun sonlar bo'lgani uchun hech qanday sonli kengayish sodir bo'lmaydi. 11/3 butun songa bo'linish amalga oshiriladi, buning natijasida 3 qiymati paydo bo'ladi, keyin esa bilvosita 3.0 ga aylantiriladi va x o'zgaruvchisiga tayinlanadi! Literallardan (masalan, 11 yoki 3) foydalansangiz, bitta yoki ikkala butun sonni suzuvchi nuqta qiymatiga (11,0 yoki 3,0) almashtirish ikkala operandni ham suzuvchi nuqta qiymatlariga aylantiradi va suzuvchi nuqtani bajaradi. bo'linish. Ammo o'zgaruvchilardan foydalansangiz nima bo'ladi? Masalan: int i1 = 11; int i2 = 3; float x = i1 / i2; 1 2 3 int i1 = 11; int i2 = 3; float x = i1 / i2; X ning qiymati 3 ga teng. Kompilyatorga butun sonlar bo‘linmasi o‘rniga suzuvchi nuqta bo‘linmasidan foydalanmoqchi ekanligimizni qanday aytamiz? To'g'ri! Kompilyatorga aniq konvertatsiya qilishni ko'rsatma berish uchun aniq ma'lumotlar turini o'zgartirish operatorlaridan foydalaning. Aniq ma'lumotlar turini o'zgartirish operatorlari C++ da aniq turdagi konvertatsiya operatsiyalarining 5 turi mavjud: C-uslubini konvertatsiya qilish; static_cast operatoridan foydalanish; const_cast operatoridan foydalanish; dynamic_cast operatoridan foydalanish; reinterpret_cast operatoridan foydalanish. Ushbu darsda biz C uslubidagi konvertatsiya va static_cast operatorini ko'rib chiqamiz. Ko‘rsatkichlar va merosga o‘tganimizda dynamic_cast operatorini ko‘rib chiqamiz. const_cast va reinterpret_cast operatorlaridan foydalanishga yo'l qo'ymaslik kerak, chunki ular kamdan-kam hollarda foydalidir va noto'g'ri ishlatilsa, muammoli bo'lishi mumkin. Qoida: Agar jiddiy sabab boʻlmasa, const_cast va reinterpret_cast dan foydalanmang. C uslubini aylantirish C dasturlashda ma'lumotlar turini aniq konvertatsiya qilish () operatori yordamida amalga oshiriladi. Qavslar ichiga konvertatsiya qilinadigan turni yozamiz. Ushbu turdagi konvertatsiya C uslubidagi konvertatsiya deb ataladi. Masalan: int i1 = 11; int i2 = 3; float x = (float)i1 / i2; int i1 = 11; int i2 = 3; float x = (float)i1 / i2; Yuqoridagi dasturda biz qavslar yordamida kompilyatorga i1 (int tipidagi) o'zgaruvchini floatga aylantirishni aytamiz. i1 floatga aylanganligi sababli, i2 avtomatik ravishda floatga aylantiriladi va suzuvchi nuqta bo'linishi amalga oshiriladi! C++ tili ushbu operatordan quyidagi tarzda foydalanishga ham imkon beradi: int i1 = 11; int i2 = 3; float x = float(i1) / i2; int i1 = 11; int i2 = 3; float x = float(i1) / i2; C uslubidagi konvertatsiya kompilyator tomonidan kompilyatsiya vaqtida tekshirilmaydi, shuning uchun uni, masalan, const turlarini konvertatsiya qilishda yoki ma'lumotlar turlarini ularning diapazonlarini hisobga olmasdan o'zgartirganda (to'lib ketishiga olib kelishi mumkin) noto'g'ri foydalanish mumkin. Shuning uchun, C uslubidagi konvertatsiyadan foydalanmaslik yaxshiroqdir. Qoida: C uslubidagi konvertatsiyadan foydalanmang. Static_cast operatori C ++ da yana bir aniq ma'lumotlar turini o'zgartirish operatori mavjud - static_cast operatori. Avvalroq, char belgilar turi haqidagi darsda biz allaqachon static_cast operatoridan char tipidagi o‘zgaruvchini int turiga o‘tkazish uchun ishlatgan edik, bunda belgi o‘rniga butun son chiqarildi: char c = 97; std :: cout << static_cast char c = 97; std :: cout << static_cast static_cast operatori asosiy ma'lumotlar turini boshqasiga aylantirish uchun eng yaxshi qo'llaniladi: int i1 = 11; int i2 = 3; float x = static_cast int i1 = 11; int i2 = 3; float x = static_cast Static_cast operatorining asosiy afzalligi shundaki, u kompilyatsiya vaqtida kompilyator tomonidan tekshiriladi, bu esa kutilmagan muammolar yuzaga kelishini qiyinlashtiradi. Yashirin konvertatsiya qilishda aniq konversiya operatorlaridan foydalanish Agar siz ma'lumotlar turlari bo'yicha xavfli yashirin konvertatsiya qilsangiz, kompilyator shikoyat qiladi. Masalan: int i = 49; char ch = i; // yashirin konvertatsiya int i = 49; char ch = i; // yashirin konvertatsiya int (4 bayt) tipidagi o‘zgaruvchini char turiga (1 bayt) o‘zgartirish potentsial xavflidir – kompilyator ogohlantirish beradi. Siz ataylab potentsial xavfli ishni qilyapsiz (lekin baribir buni qilishni xohlaysiz) haqida unga xabar berish uchun static_cast iborasidan foydalaning: int i = 49; char ch = static_cast int i = 49; char ch = static_cast Quyidagi holatda kompilyator double turidan int turiga o'tkazish ma'lumotlar yo'qolishiga olib kelishi mumkinligidan shikoyat qiladi: int i = 90; i = i / 3,6; int i = 90; i = i / 3,6; Kompilyatorga buni ataylab qilishni xohlayotganimizni aytish uchun: int i = 90; i = static_cast int i = 90; i = static_cast Xulosa Iloji bo'lsa, ma'lumotlar turini o'zgartirishdan qochish kerak, chunki bunday o'zgarishlar qachon amalga oshirilsa, kutilmagan muammolar yuzaga kelishi mumkin. Ammo ko'pincha buni oldini olish mumkin bo'lmagan holatlar mavjud. Shuning uchun, bunday hollarda C uslubidagi konvertatsiya o'rniga static_cast operatoridan foydalangan ma'qul. Download 297.3 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling