Reja: Namespace – nomlar fasozi nima? Nomlar fazosida xatoliklar


Download 1.49 Mb.
Pdf ko'rish
Sana02.06.2020
Hajmi1.49 Mb.
#113275
Bog'liq
Informatika asoslari 1 taqdimot Nomalum turlar va namespace 2019 (2)


Reja: 

1.

 Namespace – nomlar fasozi nima? 

2.

 Nomlar fazosida xatoliklar; 

3.

 Ichma – ich joylashgan nomlar fazosi; 

4.

 Turdan turga o’tkazish operatorlari; 

5.

 Xulosa. 

PhD: Mallayev O.U. 

https://t.me/daslabkiAqil 



Namespace – nomlar fasozi

 



Namespace  – 



bir-xil  identifakator

larni  bitta 

dasturda ishlatish muammosini hal qiladi. 

 



Namespace ni umumiy strukturasi quyidagicha: 



namespace

 <nom



……… 



Namespace ga misol: 

Umimiy nomlar sohasidan foydalanish 

Nomlar fazosida xatoliklar: 

Nomlar fazosida sinflar 

 

Ichma – ich joylashgan nomlar fazosi 

Masala: 

 

“talaba” 

nomli  nomlar  fazosi  va  unda 

Talaba” 

classini  yarating.  Class  maydonlari: 



Familiyasi,  ismi,  kursi,  baholari,  stipendiyasi

Class 



komponentalarini 

inkapsulyastiyalash, 

konstruktorlar  va  class  metodlarini  ishlab 

chiqing.  Obyektlar  massivini  yarating  va  ular 

ustida  qidirish,  saralash,  o’zgartirish  amallarini 

bajaring. 



Dasturi 

Aniq va aniq bo’lmagan 

o’zgartirishlar 

 

C  ++  aniq  va  noma’lum  ma'lumotlar  turini 



o'zgartirishni 

farqlaydi. 

Ma'lum 

bo'lmagan 



turdagi 

ma'lumotlar  konversiyasini  C  ++  kompilyatori  amalga 

oshiradi,  lekin  dasturchining  o'zi  aniq  ma'lumotlarni 

aylantirishni amalga oshiradi. Ma'lumotlar turini o'zgartirish 

to'g'risida  quyidagi  jadvalda  keltirilgan.  Jadvalda  bo'linish 

operatsiyasini  ko'rib  chiqilgan.  Biz  int  ni  qabul  qiladigan 

butun  son  turi  sifatida,  haqiqiy  ma'lumotlar  turi  suzuvchi 

bo'ladi. 



Turdan turga o’tkazishning aniq va 

noaniq usullari 





Bo’lish natijasi 

Misol 

Bo’linuvchi 

Bo’luvchi 

Vaqtincha 

x = 15 y = 2 

int 

int 

int 

15/2=7 

int 

float 

float 

15/2=7.5 

float 

int 

float 

15/2=7.5 


Ma'lumot turlarini aniq o'zgartirish usuli: 



float (15) / 2 // natija 7.5, 15 raqami haqiqiy ma'lumot 

turiga o'zgartiriladi. 



double (15) / 2 // natija 7.5 - bir xil !!! 

C ++ shuningdek, bir tomonlama(Unar) operatsiyani 



bajaradi: 



static_cast * ma'lumotlar turi * /> (/ * o'zgaruvchi yoki 



raqam * /) 



misol: 



static_cast  (15) / 2, 

natija 7.5 



int ret=15; 



static_cast(ret)/2 //Natija 7.5 



Turdan turga o’tkazish operatorlari 

Ba'zi  turdan-turga  o’tkazuvchi  operatorlar  faqat  C  ++  da  qo'llaniladi. 



Ushbu  operatorlar  C  tili  turini  tavsiflovchi  noaniqlik  va  xato 

imkoniyatlarini yo'q qiladi, bu operatorlar quyida keltirilgan. 



dynamic_cast polimorf turlarini o'zgartirish uchun ishlatiladi. 



static_cast polimorf bo'lmagan turlarni o'zgartirish uchun ishlatiladi. 



const_cast  const,  volatile,  и  __unaligned    atributlarni  o’chirish  uchun 

ishlatiladi. 



reinterpret_cast - bitlarni oson izohlash uchun. 

C  ++  da  ishlatiladigan  safe_cast  tekshirilayotgan  MSILni  yaratish 



uchun ishlaydi. 

So'nggi 



chora 

sifatida 



const_cast 

va 


reinterpret_cast-dan 

foydalaniladi. 



 

static_cast - C ++ da ma'lumotlarning bir xil 

turini o’tkazish 

 

Static_cast  operatsiyasi  faqat  C  ++  da  mavjud. 

static_cast-ni  bir  turni  ikkinchisiga  o'tkazish  uchun  ishlatish 

mumkin,  ammo  u  noto'g'ri  konversiyani  amalga  oshirish 

uchun  ishlatilmaydi,  masalan,  qiymatni  ko'rsatgichga  yoki 

aksincha. 

C-uslubidagi 

quyishdan 

ko'ra 

static_cast 



operatsiyasidan foydalanish tavsiya etiladi, chunki static_cast 

yaroqsiz kastlarni cheklaydi va shuning uchun xavfsizroqdir. 

 

Qat'iy  aytganda,  static_cast  operatsiyasi  -  bu  ishlash 

uchun  ma'lumotlar  turini  aniq  ko'rsatishingiz  kerak  bo'lgan 

funktsiya 

shablonidir, 

ya'ni 

shablon 


parametrini 

belgilashingiz kerak. 



Funksiyalarni qayta yuklash 

Funksiya shabloni 

static_cast va dynamic_cats

 

dynamic_cast  operatsiyasi  faqat  C  ++  da  mavjud  va  faqat 

"polimorfik tiplar" ierarxik classi a'zolariga nisbatan qo'llaniladi. 


Masala:

 

Sinf ma'lum bir turning namunasi ekanligini 

aniqlash uchun dynamic_cast-dan foydalanish: 

Bir nechta merosni ko'rsatuvchi sinf 

ierarxiyasi 

 

D  turidagi  obyektga  ko'rsatgichni  B  yoki  C  ga 

xavfsiz  uzatish  mumkin.  Ammo,  agar  turdan  turga  keltirish 

natijasida  D  obyekt  A  obyektiga  ishora  qilsa,  A  obyekti 

qaysi namunaga olib keladi?  

 

Bu  noaniq  turdan  turga  keltirish  xatoga  olib  kelishi 



mumkin. Ushbu muammoni hal qilish uchun siz ikkita aniq 

turdan turga keltirishni bajarishingiz mumkin.  



Masala:

 

Turlar ierarxiyasi: 

Turlar ierarxiyasi ga misol 

Ierarxiyada virtual bo'lmagan funktsiyani 

ham chaqirish 

static_cast operatori 

Ifodani faqat iborada mavjud bo'lgan turlarga asoslanib, tur 



identifikatorini kiritish uchun o'zgartiradi. 



Sintaksisi

 - 

static_cast  ( expression ); 



Static_cast 

operatoridan ko'rsatgichni bazaviy sinfga va olingan 

sinfga  ko'rsatgichga  aylantirish  kabi  operatsiyalar  uchun 

foydalanish  mumkin.  Bunday  o'zgartirishlar  har  doim  ham 

xavfsiz emas. 

Umuman  olganda, 



static_cast 

raqamli  ma'lumotlarning  turlarini 

o'zgartirish  uchun  ishlatiladi,  masalan,  sonlar  yoki  butun 

sonlarga  raqamlar,  suzuvchi  nuqta  raqamlari  va  konversiyada 

ishlatiladigan ma'lum ma'lumotlar turlari.  


static_cast operatoriga misol

 


Misol tahlili

 



Dynamic_cast

-dan 

farqli 


o'laroq, 

static_cast

 

pb 

konversiyasida ish vaqti tekshiruvi amalga oshirilmaydi. Pb 

bilan  ko'rsatilgan  obyekt  D  turining  obyekti  bo'lmasligi 

mumkin,  bu  holda  *pd2-dan  foydalanish  dahshatli 

oqibatlarga  olib  kelishi  mumkin.  Masalan,  D  sinfiga 

tegishli,  ammo  B  sinfiga  kirmaydigan  funktsiyani  chaqirish 

kirishning buzilishiga olib kelishi mumkin. 



Dynamic_cast  va  static_cast  operatorlari  ko'rsatgichni  sinf 

ierarxiyasi  bo'ylab  harakatlantiradilar.  Ammo  static_cast 

faqat operatorda taqdim etilgan ma'lumotlardan foydalanadi 

va shuning uchun xavfli bo'lishi mumkin.  



Misol: 

Agar  B  class  ning  test  funksiyasidan  “



virtual

”  kalit 

so’zini olib tashasam xatolik yuz beradi. 


Static_cast

 

operatori har qanday yashirin 



konversiyani, shu jumladan standart konversiyalarni 

va foydalanuvchi belgilagan konversiyalarni amalga 

oshirish uchun ham ishlatilishi mumkin. 


Foydalanilgan adabiyotlar 

1.

https://docs.microsoft.com/ru-ru/cpp/cpp/dynamic-cast-

operator?view=vs-2019 

2.

https://docs.microsoft.com/ru-ru/cpp/cpp/bad-cast-

exception?view=vs-2019 

3.

https://docs.microsoft.com/ru-ru/cpp/cpp/static-cast-

operator?view=vs-2019 

4.

https://docs.microsoft.com/ru-ru/cpp/cpp/reinterpret-cast-

operator?view=vs-2019 

5.

https://ravesli.com/urok-171-dinamicheskoe-privedenie-

tipov-operator-dynamic_cast/ 

6.

http://cppstudio.com/post/5165/ 

 


Xulosa 

 

 



 

Nomlar  fazosi

  –  kutubxonalarda  joylashgan  sinf 

a’zolarini  bitta  dasturda  bir  xil  nom  ostida  ishlatish 

imkonini beradi. 



 

 

C++ tilida turdan turga keltirish operatorlari: 



1)

dynamic_cast(); 

2)

satatic_cast(); 

3)

bad_cast(); 

4)

const_cast(); 

Download 1.49 Mb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling