– DARS. HOTIRA SINFLARI - 1 – dars. C++ Dasturlash tilining kelib chiqishi xaqida ma’lumot

|
1 – dars. C++ Dasturlash tilining kelib chiqishi xaqida ma’lumot
|
bet | 26/89 | Sana | 16.11.2023 | Hajmi | 313,45 Kb. | | #100010 |
Bog'liq @AKT Official C haqida o\'zbekcha darslar majmui24 – DARS. HOTIRA SINFLARI.
Ob'ektlarni lokallashtirish.
Blok deb funktsiya tanasi eki figurali qavslar ichiga olingan ta'riflar va operatorlar ketma ketlishgiga aytiladi.
Avtomatik hotira ob'ektlari faqat o’zi aniqlangan blok ichida mavjud bo’ladi. Blokdan chiqishda ob'ektlar uchun ajratilgan hotira qismi bo’shatiladi, ya'ni ob'ektlar yuqoladi. Shunday qilib avtomatik hotira har doim ichki hotiradir, ya'ni bu hotiraga o’zi aniqlangan blokda murojaat qilish mumkin. Avtomatik hotira ob'ektlari auto yoki register so’zlari yordamida ta'riflanadi. Agar mahsus ko’rsatilmagan bo’lsa o’zgaruvchi har doim avtomatik hotira turiga tegiishli deb hisoblanadi. Statik hotira ob'ektlari blokdan chiqilgandan so’ng ham mavjud bo’lib qolaveradi. Statik hotira ob'ektlari statik hizmatchi so’zi yordamida ta'riflanadi.
Misol:
#Include
void autofunc(void)
{ int K=1;
Cout<<(“\K=%d”,K);
K++;
Return;
}
void main()
{
int i;
for (i=0;i<5;i++)
autofunc();
}
Bu dastur bajarilishi natijasi:
K=1 K=1 K=1 K=1 K=1
Shu dasturning ikkinchi ko’rinishida K o’zgaruvchi statik o’zgaruvchi sifatida ta'riflanadi:
#Include
void autofunc(void)
{ static int K=1;
Cout<<(“\K=%d”,K);
K++;
Return;
}
void main()
{
int i;
for (i=0;i<5;i++)
autofunc();
}
Bu dastur bajarilishi natijasi:
K=1 K=2 K=3 K=4 K=5
Bu misolda K o’zgaruvchi faqat bir marta initsializatsiya qilinadi va uning qiymati navbatdagi murojaatgacha saqlanadi.
25 – DARS. GLOBAL OB'EKTLAR.
Global ob'ektlar deb dasturda hamma bloklar uchun umumiy bo’lgan ob'ektlarga aytiladi. Har bir blok ichida global ob'ektga murojjat qilish mumkindir.
Misol:
#include
int N=5;
void func(void)
{
Cout<<(“\tN=%d”,N);
N--;
Return;
}
void main()
{
int i;
for (i=0;i<5;i++)
{func();
N+=2;
}
}
Dastur bajarilishi natijasi:
N=5 N=6 N=7 N=8 N=9
N o’zgaruvchisi main() va func() funktsiyalari tashqarisida aniqlangan va bu funktsiyalarga nisbatan globaldir. Har bir func() chaqirlganda uning qiymati 1 ga kamayadi, asosiy dasturda bo’lsa 2 taga oshadi. Natijada N qiymati 1 ga oshib boradi.
Endi dasturni o’zgartiramiz:
#include
int N=5;
void func(void)
{
Cout<<(“\tN=%d”,N);
N--;
Return;
}
void main()
{
int N;
for (N=0;N<5;N++)
{func();
N+=2;
}
}
Dastur bajarilishi natijasi:
N=5 N=4 N=3 N=2 N=1
N uzgaruvchisi main() funktsiyasida avtomatik o’zgaruvchi sifatida ta'riflangan va u global N o’zgaruvchiga ta'sir qilmaydi. Ya'ni global N o’zgaruvchi main() funktsisida ko’rinmaydi.
Tashqi ob'ektlar.
Dastur bir necha matnli fayllarda joylashgan bo’lishi mumkin. Dastur o’z navbatida funktsiyalardan iboratdir. Hamma funktsiyalar tashqi hisoblanadi. Hatto har hil fayllarda joylashgan funktsiyalar ham har hil nomlarga ega bo’lishi lozimdir. Funktsiyalardan tashqari dasturlarda tashqi ob'ektlar o’zgaruvchilar, ko’rsatkichlar, massivlar ishlatilishi mumkin.
Tashqi ob'ektlar hamma funktsiyalarda ham ko’rinmasligi mumkin. Agar ob'ekt fayl boshida ta'riflangan bo’lsa u shu fayldagi hamma funktsiyalarda ko’rinadi.
Agar tashqi ob'ektga shu ob'ekt ta'riflangan blokdan yuqorida eki boshqa faylda joylashgan blokdan murojjat qilinishi kerak bo’lsa, bu ob'ekt extern hizmatchi so’zi yordamida ta'riflanshi lozimdir. Shuni aytish lozimki extern hizmatchi so’zi yordamida ta'riflanganda initsializatsiya qlish yo chegaralarni ko’atish mumkin emas.
Extern double summa[];
Extern char D_phil [];
Extern long M;
Misol uchun VAL va SP o’zgaruvchilari bitta faylda, bu o’zgaruvchilarga murojaat qiluvchi PUSH, POP i CLEAR funktsiyalari boshqa faylda ta'riflangan bo’lsin. Bu holda bu fayllar orasidagi bog’liklikni ta'minlash uchun quyidagi ta'riflar lozimdir:
1 faylda:
int sp = 0; /* stack pointer */
double val[maxval]; /* value stack */
2 faylda:
extern int sp;
extern double val[];
double push(f) ...
double pop() ...
clear() ...
|
| |