C++ tur o'zgartirish (Type Conversion)
C++ bir turdagi maʼlumotlarni boshqasiga oʻzgartirish imkonini beradi. Bu turdagi konvertatsiya sifatida tanilgan.
C++ da konvertatsiya qilishning ikki turi mavjud:
Kompilyator tomonidan avtomatik ravishda amalga oshiriladigan turdagi konvertatsiya yopiq turdagi konvertatsiya deb nomlanadi. Ushbu turdagi konvertatsiya avtomatik konvertatsiya sifatida ham tanilgan.
// Yashirin turdagi konversiyaning ishlashi
#include <iostream>
using namespace std;
int main() {
// num_int ga int qiymatini belgilash
int num_int = 9;
// ikki turdagi o'zgaruvchini e'lon qilish
double num_double;
// yashirin konvertatsiya
// qo'sh o'zgaruvchiga int qiymatini belgilash
num_double = num_int;
cout << "num_int = " << num_int << endl;
cout << "num_double = " << num_double << endl;
return 0;
}
Chiqish
num_int = 9
num_double = 9
Dasturda biz int ma'lumotlarini double o'zgaruvchisiga tayinladik.
num_double = num_int;
Bu erda int qiymati num_double o'zgaruvchisiga tayinlanishidan oldin kompilyator tomonidan avtomatik ravishda double ga aylantiriladi. Bu yashirin turdagi konvertatsiyaga misol.
#include <iostream>
using namespace std;
int main() {
int num_int;
double num_double = 9.99;
// yashirin konvertatsiya
// int o'zgaruvchisiga qo'sh qiymat berish
num_int = num_double;
cout << "num_int = " << num_int << endl;
cout << "num_double = " << num_double << endl;
return 0;
}
Chiqish
num_int = 9
num_double = 9.99
Dasturda biz double ma'lumotlarini int o'zgaruvchisiga tayinladik.
num_int = num_double;
Bu erda double qiymati num_int o'zgaruvchisiga tayinlanishidan oldin kompilyator tomonidan avtomatik ravishda int ga aylantiriladi. Bu, shuningdek, yashirin turdagi konvertatsiyaga misoldir.
[!NOTE]
into'nli qismga ega bo'lmasligi sababli, yuqoridagi misolda kasrdan keyingi raqamlar qisqartiriladi.
Yuqoridagi misoldan ko'rganimizdek, bir data type dan boshqasiga o'tkazish ma'lumotlar yo'qolishiga moyil. Bu kattaroq turdagi ma'lumotlar kichikroq turdagi ma'lumotlarga aylantirilganda sodir bo'ladi.
Keling, butun sonli ma'lumotlar turlarida turdagi konvertatsiya paytida ma'lumotlar yo'qolishini ko'rib chiqaylik.
Possible Data Loss During Type Conversion in Integer Data Type

Keling, suzuvchi nuqtali ma'lumotlar turlarida turdagi konvertatsiya paytida ma'lumotlar yo'qolishini ko'rib chiqaylik.
Possible Data Loss During Type Conversion in Floating Point Data Type

[!NOTE] Butun son va suzuvchi nuqta ma'lumotlar turlari o'rtasida konvertatsiya qilish paytida ma'lumotlar yo'qolishi mumkin.
Agar dasturchi ma'lumotlarni bir turdan ikkinchisiga qo'lda o'zgartirsa, bu aniq konvertatsiya deb nomlanadi. Ushbu turdagi konvertatsiya, shuningdek, turdagi quyma sifatida ham tanilgan.
C++ da aniq konversiyadan foydalanishning uchta asosiy usuli mavjud:
[!NOTE] C-style and function-style casting should not be used in modern C++ code.
C++ da aniq turdagi konvertatsiya qilish uchun to'rtta ifoda mavjud. Ular C++ nomli castlar sifatida tanilgan. Ular:
static_castdynamic_castconst_castreinterpret_castHar bir operator haqida bilish uchun C++ Named Casts ga tashrif buyuring.
Nomidan ko'rinib turibdiki, bu turdagi kasting C dasturlash tili tomonidan ma'qullanadi. U cast notation sifatida ham tanilgan.
Sintaksis
(data_type)expression;
Masalan,
// int o'zgaruvchini ishga tushirish
int num_int = 26;
// qo'sh o'zgaruvchini e'lon qilish
double num_double;
// int dan double ga aylantirish
num_double = (double)num_int;
Shuningdek, biz ma'lumotlarni bir turdan ikkinchisiga o'tkazish uchun funksiyaga o'xshash belgilardan foydalanishimiz mumkin.
Sintaksis
data_type(expression);
Masalan,
// int o'zgaruvchini ishga tushirish
int num_int = 26;
// qo'sh o'zgaruvchini e'lon qilish
double num_double;
// int dan double ga aylantirish
num_double = double(num_int);
#include <iostream>
using namespace std;
int main() {
// qo'sh o'zgaruvchini ishga tushirish
double num_double = 3.56;
cout << "num_double = " << num_double << endl;
// Double dan int ga C uslubidagi konvertatsiya
int num_int1 = (int)num_double;
cout << "num_int1 = " << num_int1 << endl;
// funksiya uslubida double dan int ga o'zgartirish
int num_int2 = int(num_double);
cout << "num_int2 = " << num_int2 << endl;
return 0;
}
Chiqish
num_double = 3.56
num_int1 = 3
num_int2 = 3
Biz C uslubi turini konvertatsiya qilishdan va turni o'zgartirish uchun funksiya uslubidagi kastingdan foydalandik va natijalarni ko'rsatdik. Ular bir xil vazifani bajarganligi sababli, ikkalasi ham bizga bir xil natija beradi.
Zamonaviy C++ kodida C-uslubi va funksiya uslubidagi kastingdan qochish kerak. Ushbu translatsiya usullari xavfli deb hisoblanadi, chunki ular C++ nomli cast ifodalari bajaradigan turni tekshirish va cheklovlarni ta'minlamaydi. Ushbu xavfsizlikning etishmasligi dasturlaringizda topish qiyin bo'lgan xatolar va aniqlanmagan xatti-harakatlarga olib kelishi mumkin. Buning o'rniga, turdagi konvertatsiya qilish uchun aniqroq va xavfsizroq variantlarni taklif qiluvchi C++ nomli translatsiyalardan foydalanish tavsiya etiladi.
Shuningdek o'qing: