|
C++ programmalastırıw tilinde dızbekler menen islew. Dızbeklerge programmalar tuzush. Joba
|
bet | 4/8 | Sana | 06.12.2023 | Hajmi | 285,94 Kb. | | #112387 |
Bog'liq massivDinamikalıq dızbekler
C++ tilinde ózgeriwshiler yamasa statikalıq tárzde - kompilyatsiya waqtında, yamasa standart kitapxanadan funkciyalardı shaqırıp alıw jolı menen dinamikalıq tárzde - programmanı orınlaw waqtında jaylastırılıwı múmkin. Tiykarǵı parq bul usıllardı qóllawda kórinedi - olardıń natiyjeliligi hám maslasıwshılıǵında. Statikalıq jaylastırıw natiyjelilew, sebebi bunda yadtı ajıratıw programma orınlanıwınan aldın júz boladı. Biraq bul usıldıń maslasıwshılıǵı talay tómen, sebebi bunda biz jaylastırılıp atırǵan ob'ekttiń túri hám ólshemlerin aldınan biliwimiz kerek boladı. Mısalı, tekstiy fayldıń ishindegisin qatarlardıń statikalıq dızbekinde jaylastırıw qıyın : aldınan onıń ólshemlerin biliw kerek boladı. Belgisiz sanlı elementlerdi aldınan saqlaw hám qayta islew kerek bolǵan máseleler ádetde yaddıń dinamikalıq ajratılıwın talap etedi.
Yadtı dinamikalıq hám statikalıq ajıratıw ortasındaǵı tiykarǵı ayırmashılıqlar tómendegishe:
statik ob'ektler atalǵan ózgeriwshiler menen belgilenedi, hám de bul ob'ektler ortasındaǵı ámeller tuwrıdan-tuwrı, olardıń atlarınan paydalanǵan halda, ámelge asıriladı. Dinamikalıq ob'ektler óz jeke atlarına iye bolmaydı, hám olar ústindegi ámeller tikkeley bolmaǵan,
ko'rsatkichlar járdeminde, ámelge asıriladı ;
statik ob'ektler ushın yadtı ajıratıw hám bosatish kompilyator tárepinen avtomatikalıq tárzde ámelge asıriladı. Programmist bul haqqında ózi qayǵılanıwı kerek emes. Statikalıq ob'ektler ushın yadtı ajıratıw hám bosatish tolıqlıǵınsha programmist moynına júkletiledi. Bul talayyin qıyın másele jáne onı sheshiwde qatege jol qoyıw ańsat.
Dinamikalıq tárzde ajratilayotgan yad ústinde túrli minez-qulqlardı ámelge asırıw ushın new hám delete poeratorlari xızmet etedi.
Sol waqıtqa shekem barlıq mısallarda statikalıq yad ajıratıw qollanıladı. Mısalı, i ózgeriwshisin anıqlaw :
int i=1024;
Bul komanda yadta sonday tarawdı ajıratıp berediki, ol int túrindegi ózgeriwshin saqlaw, bul tarawdıń menen i atınıń bólew hám de ol jerge 1024 ma`nisin jaylastırıw ushın jetkilikli boladı. Bulardıń hámmesi programma orınlanıwınan aldın kompilyatsiya basqıshında ámelge asıriladı.
Biraq ózgeriwshige yadtı ajıratıp beriw ushın taǵı bir usıl ámeldegi bolıp, ol new operatorın qóllawdan ibarat.
New operatorı eki formaǵa iye. Birinshi forma málim bir túrdegi jalǵız ob'ektke yadtı ajıratıp beredi; int*pint=new int (1024)
Bul jerde new operatorı int túrindegi nomsiz ob'ektke yadtı ajıratıp beredi, onı 1024 ma`nisi menen ataltiradi (initsiallashtiradi) hám de jaratılǵan ob'ekt adresin qaytarıp beredi. Bul adres pint kórsetkishine jaylastırıladı. Bul nomsiz ob'ekt ústindegi barlıq minez-qulqlar sol kórsetkish menen islew arqalı ámelge asıriladı, sebebi dinamikalıq ob'ekt menen tuwrıdan-tuwrı jumıs aparıw (manipulyatcıyalar ótkeriw) múmkin emes.
New operatorining yekinshi shakli ma'lum bir turdagi
elementlerden shólkemlesken berilgen ólshemler degi dızbekke yad ajıratıp beredi:
int *pia=new int[4];
Bul mısalda yad int túrindegi tórtew elementten ibarat dızbekke yad ajratıladı. Ókiniw menen aytamız, new operatorınıń bul forması dızbek elementlerin ataltırıw (initsiallashtirish) imkaniyatın bermeydi.
New operatorınıń hár eki forması da birdey kórsetkishni qaytarıwı (keltirilgen mısalda bul pútkil sannıń kórsetkishi) ayırım shálkesliklerge alıp keledi.pint da pia da áyne birdey daǵaza etilgen Biraq pint operatorı int túrindegi bir ob'ektti kórsetedi, pia bolsa int túrindegi tórtew ob'ektten ibarat dızbektiń birinshi elementin kórsetedi.
Dinamikalıq ob'ekt kerek bolmay qalǵanda, oǵan ajıratılǵan yadtı tuwrıdan-tuwrı bosatish kerek. Bul jumıs delete operatorı járdeminde ámelge asıriladı :
delete pint;
Ob'ekttiń bosatilishi, new sıyaqlı, eki formaǵa iye - jalǵız ob'ekt ushın hám dızbek ushın :
delete[ ] pia;
Eger ajıratılǵan yadtı bosatish esten chiqqudek bolsa, bul yad biykardan -bıykarǵa sarplana baslaydı, paydalanilmay qaladı, biraq, eger onıń kórsetkishi óz ma`nisin ózgertirgen bolsa, onı sistemaǵa qaytarıw múmkin emes. Bul hádiyse yaddıń joǵatılıwı (utechka pamyati) degen arnawlı at menen ataladı. Sońı nátiyjede programma yad jetiwmagani sebepli avarıya jaǵdayında tamamlanadı (eger ol talay waqıt isleyversa).
|
| |