Ko'p hollarda bu amal avtomatik ravishda, kompilyator tarafidan bajariladi.
Masalan ushbu parchani ko'raylik:
char c = 33;
int k;
k = c;
Bu yerda k ning sig'imi c nikidan kattaroqdir. Shuning uchun c ning qiymatini k
ga berishda hech qanday muammo paydo bo'lmaydi. Quyidagi misolni ko'raylik:
int i = 5;
float f = 9.77;
float result;
result = f + i;
C++ ning kompilyatori ikki turdagi o'zgaruvchilar bilan ishlay olmaydi.
Shu sababli ifodadagi sig'imi kichik bo'lgan o'zgaruvchilar ifodadagi qatnashgan
eng katta sig'imga o'tqaziladi. Bu ham avtomatik tarzda bajariladi. i o'zgaruvchimiz
qiymati vaqtinchalik
float
tipidagi o'zgaruvchiga beriladi. Bu vaqtinchalik
o'zgaruvchi esa f ga qo'shiladi. Chiqqan javob result ga beriladi. Yuqorida ko'rib
chiqqanlarimiz kompilyator tarafidan bajariladi. Bu kabi tip o'zgarishlarini
avtomatik konversiya(implicit conversion) deymiz. Lekin gohida to'g'ri
kelmaydigan tiplarni birga qo'llashga to'g'ri keladi. Masalan
float
tipiga double
tipni o'tqazish, char ga int va hokazo. Bu hollarda ochiq konversiya (explicit
conversion) amalini bajarishimiz kerak. Buni bajarishning ikki uslubi bor.
Birinchisi C da qo'llaniladigan yo'l, ikkinchisi C++ uslubi. C da tipni
keltirish
uchun o'zgaruvchi oldiga kerakli tipni () qavslar ichida yozamiz.
int k = 100;
char s;
s = (char)k;
Yuqorida k ning qiymatini char tipidagi vaqtinchalik o'zgaruvchiga berildi, keyin
s ga ushbu o'zgaruvchi qiymatini berildi.Bu yerda etibor berilishi kerak bo'lgan
narsa shuki, 100 char ga ham to'g'ri keladi. Agar k ning qiymati char oladigan
qiymattan kattaroq/kichikroq bo'ladigan bo'lsa, bu hato olib keladi. Shu sababli C
dagi tip keltirish nisbatan havfli hisoblanadi. Lekin albatta bilib qo'llanilsa
katta
yordam beradi. C++ da ma'lumotlar tipini keltirish uchun mahsus operatorlar
kiritildi. C uslubidagi keltirish hamma sharoitda qo'llanilar edi. C++ ning keltirish
operatorlari esa faqat o'ziga ajratilgan funksiyalarni bajaradi. Undan tashqari ular C
dagi keltirishlardan ko'ra kuchsizroqdir. Shu sababli hato ehtimoli kamaytirildi.
Yana
bir afzallik tarafi shundaki, yangi stildagi keltirish operatorlari tip
tekshirishlarini
bajarishadi, agar noto'g'ri keltirish bajarilsa,
bu sintaktik hatoga
olib keladi.
Ular quyida berilgan:
static_cast
dynamic_cast
const_cast
reinterpret_cast
static_cast ni ko'rib chiqaylik.
int k = 200;
char h;
h = static_cast
(k);
Dostları ilə paylaş: