«Aniq fanlar» kafedrasi fanidan ma’ruzalar matni


volatile sinfi o‘zgaruvchilari


Download 1.15 Mb.
bet67/161
Sana02.01.2022
Hajmi1.15 Mb.
#200874
1   ...   63   64   65   66   67   68   69   70   ...   161
Bog'liq
dasturlash fanidan maruzalar matni 2

volatile sinfi o‘zgaruvchilari. Agar programmada o‘zgaruvchini birorta tashqi qurilma yoki boshqa programma bilan bog‘lash uchun ishlatish zarur bo‘ladigan bo‘lsa, u volatile modifikatori bilan e’lon qilinadi. Kompilyator bunday modifikatorli o‘zgaruvchini registrga joylashtirishga harakat qilmaydi. Bunday o‘zgaruvchilar e’loniga misol quyida keltirilgan:

volatile short port_1;

volatile const int Adress=0x00A2;

Misoldan ko‘rinib turibdiki, volatile modifikatorli o‘zgarmas ham e’lon qilinishi mumkin.



Nomlar fazosi: Ma’lumki, programmaga qo‘shilgan sarlavha fayllarida e’lon qilingan identifikator va o‘zgarmaslar kompilyator tomonidan yagona global nomlar fazosiga kiritiladi. Agar programma ko‘p miqdordagi sarlavha fayllarni ishlatsa va undagi identifikatorlar (funksiya nomlari va o‘zgaruvchilar nomlari, sinflar nomlari va hakozalar) va o’zgarmaslar nomlari turli programma tuzuvchilar tomonidan mustaqil ravishda aniqlangan bo‘lsa, bir xil nomlarni ishlatish bilan bog‘liq muommolar yuzaga kelish ehtimoli katta bo‘ladi. Nomlar fazosi tushunchasining kiritilishi mazkur muammoni ma’lum bir ma’noda hal qilishga yordam beradi. Agar programmada yangi identifikatorni aniqlash kerak bo‘lsa va xuddi shu nomni boshqa modullarda yoki kutubxonalarda ishlatishi xavfi bo‘ladigan bo‘lsa, bu identifikatorlar uchun o’zining shaxsiy nomlar fazosini aniqlash mumkin. Bunga namespace kalit so‘zidan foydalanilgan holda erishiladi:

namespace

{

//e’lonlar



}

Nomlar fazosi ichida e’lon qilingan identifikatorlar faqat ko‘rinish sohasida bo‘ladi va yuzaga kelishi mumkin bo‘lgan kelishmovchiliklarning oldi olinadi.

Misol tariqasida quyidagi nomlar fazosini yarataylik:

namespace Shaxsiy_nomlar

{int x,y,z;

void Mening_funksiyam(char belgi);

}

Kompilyatorga konkret nomlar fazosidagi nomlarni ishlatish kerakligini ko‘rsatish uchun ko‘rinish sohasiga ruxsat berish amalidan foydalanish mumkin:



Shaxsiy_nomlar::x=5;

Agar programma matnida konkret nomlar fazosiga nisbatan ko‘p murojaat qilinadigan bo‘lsa uning namespace qurilmasini ishlatish orqali yozuvni soddalashtirish mumkin:

using namespace ;

Masalan,


using namespace Shaxsiy_nomlar;

ko‘rsatmasi kompilyatorga, bundan keyin toki navbatdagi using uchramaguncha Shaxsiy_nomlar fazosidagi nomlar ishlatilishi kerakligini

bildiradi:

x=0; y=z=10;

Mening_funksiyam(‘A’);

Programma va unga qo‘shilgan sarlavha fayllari tomonidan aniqlanadigan nomlar fazosi std deb nomlanadi. Standart fazoga o‘tish kerak bo‘lsa

using namespace std;

ko‘rsatmasi beriladi.

Agar birorta nomlar fazosidagi alohida bir nomga murojaat qilish zarur bo‘lsa, using qurilmasini boshqa shaklida foydalaniladi. Misol uchun

using namespace std;

using namespace Shaxsiy_nomlar::x;

ko‘rsatmasi x identifikatorini Shaxsiy_nomlar fazosidan ishlatish kerakligini bildiradi.

Shuni qayd etish kerakki, using namespace qurilmasi standard nomlar fazosi ko‘rinish sohasini berkitadi va undagi nomga murojaat qilish uchun ko‘rinish sohasiga ruxsat berish amalidan (std: foydalanish zarur bo‘ladi.

Nomlar fazosi funksiya ichida e’lon qilinishi mumkin emas, lekin ular boshqa nomlar fazosi ichida e’lon qilinishi mumkin. Ichma-ich joylashgan nomlar fazosidagi identifikatorga murojaat qilish uchun uni qamrab olgan barcha nomlar fazosi nomlar ketma-ket ravishda ko’rsatilishi kerak. Misol uchun, quyidagi ko‘rinishda nomlar fazosi e’lon qilingan bo‘lsin:

namespace yuqori
{

namespace o’rta



{

namespace ichki



{

int Ichki_n;

}

}

}



Ichki_n o’zgaruvchisiga murojaat quyidagi ko‘rinishda bo‘ladi:

Yuqori : : O’rta : : Ichki : :Ichki_n=0 ;

Nomlar fazosida funksiyani e’lon qilishda nomlar fazosida faqat funksiya prototipini e’lon qilish va funksiya tanasini boshqa joyda e’lon qilish ma’qul variant hisoblanadi. Bu holatning ko‘rinishiga misol:

namespace Nomlar_fazosi

{

char c;


int I;

void Funksiya(char Bayroq);

}



void Nomlar_fazosi::Funksiya(char Bayroq)



// funksiya tanasi

}

Umuman olganda, o‘z nomiga ega bo‘lmagan nomlar fazosini e’lon qilish mumkin. Bu holda namespace kalit so‘zidan keyin hech nima yozilmaydi. Misol uchun



namespace

{

char c_nomsiz;



int i_nomsiz;

}

ko’rinishidagi nomlar fazosi elemenlariga murojaat hech bir prefiks ishlatmasdan amalga oshiriladi. Nomsiz nomlar fazosi faqat o‘zi e’lon qilingan fayl chegarasida amal qiladi.



C++ tili nomlar fazosining psevdonimlarini aniqlash imkonini beradi. Bu yo‘l orqali nomlar fazosini boshqa nom bilan ishlatish mumkin bo‘ladi. Masalan, nomlar fazosi nomi uzun bo‘lganda unga qisqa nom bilan murojaat qilish:

namespace Juda_uzun_nomli_fazo

{

f1oat: y;



}

Juda_uzun_nomli_fazo::y=o;

namespace Qisqa_nom= Juda_uzun_nomli_fazo;

Qisqa_nom::y=13.2;




Download 1.15 Mb.

Do'stlaringiz bilan baham:
1   ...   63   64   65   66   67   68   69   70   ...   161




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