Tiplarni dinamik tarzda
Standart bo‘yicha taqsimlovchilar
Download 1.83 Mb.
|
Tiplarni dinamik tarzda
Standart bo‘yicha taqsimlovchilar.Tuzilmali o‘zgaruvchisi uchun dinamik xotira ajratish. Tuzilmali o‘zgaruvchisi uchun xotira ajratish va bo‘shatish. Quyidagi tavsifga ega bo‘lgan data tuzilmasi berilgan bo‘lsin:
struct Date tipidagi o‘zgaruvchi uchun xotiradan joy ajratish va foydalanish uchun quyidagicha dastur fragmentini yozish kerak: 5.10-dastur. xotiradan joy ajratish va foydalanish.
Sinf obʻyekti uchun dinamik xotira ajratish. CDayWeek sinf obʻyektining ko‘rsatkichiga xotira ajratish va foydalanishni keltiramiz. 5.11-dastur. xotira ajratish va foydalanish.
new operatori yordamida massivlarga xotiradan joy ajratish va foydalanish. new operatori massiv uchun xotira ajratish uchun foydalanish mumkin. Massivga xotira ajratishda new operatorning umumiy shakli:
Bunda, ptrArray - xotira ajratilishi kerak bo‘lgan massiv nomi, type - elementlarning tiplari, size - ular bazaviy va ixtiyoriy bo‘lishi mumkin, massiv o‘lchami (elementlar soni). Delete operatori yordamida massiv obʻyektidan xotirani bo‘shatish uchun quyidagi fragment yoziladi:
Bazaviy tipli ko‘rsatkich massiviga dinamik xotira ajratish va foydalanish. Quyida float tipidagi ko‘rsatkich massivi uchun xotira ajratadi. So‘ngra qator elementlari ixtiyoriy qiymatlar bilan to‘ldiriladi. Shundan so‘ng ajratilgan xotira delete [] operatori tomonidan bo‘shatiladi.
Tizimli o‘zgaruvchilar massivi uchun xotira ajratish va undan foydalanish. 3 ta talaba tuzilmalar massivi uchun xotira ajratish va bo‘shatish ko‘rsatilgan. shuningdek, tuzilmalar massivining element maydonlariga murojaat qilish ham ko‘rsatilgan. 5.12-dastur. Xotira ajratish va foydalanish. #include "stdafx.h" #include struct TStudent {string name; string numBook; int course; float rank;}; int main(){ int n_students = 3; TStudent * pS; try{pS = new struct TStudent[n_students];} catch (bad_alloc ba){cout << "Xotira ajratilmadi " << endl; cout << ba.what() << endl; return -1;} pS->name = "Aliyev kbar"; pS->numBook = "965874123"; pS->rank = 3.93; pS->course = 1; (pS + 1)->name = "Bahromov Batir"; (pS + 1)->numBook = "20930032"; (pS + 1)->rank = 4.98; pS[1].course = 3; pS[2].name = "QobilovUsmon"; pS[2].numBook = "l2l28983"; pS[2].rank = 4.32; pS[2].course = 2; cout << pS->name.c_str() << endl; cout << pS[1].rank << endl; cout << (pS + 2)->numBook.c_str() << endl; delete[] pS; system("pause");return 0;} Massiv obʻyektlari uchun xotira ajratish va undan foydalanish.New operatoridan foydalangan holda massiv obʻyektlari uchun xotira ajratish ko‘rsatiladi va delete operatori bilan xotiradan massiv obʻyektlarini bo‘shatish ko‘rsatiladi. #include "stdafx.h" #include class CMonth{private:int month; public:CMonth() { month = 1; } CMonth(int nmonth){if ((1 <= nmonth) && (nmonth <= 12)) month = nmonth; Else month = 1; } int Get(void) { return month; } void Set(int nmonth){ if ((1 <= nmonth) && (nmonth <= 12)) month = nmonth;}}; int main(){ int nMonths = 12; CMonth * pM; 5.12-dastur. Xotira ajratish va foydalanish. try { pM = new CMonth[12]; } catch (bad_alloc ba) { cout << "Xotira ajratimadi: " << endl; cout << ba.what() << endl; return -1; } for (int i = 1; i <= 12; i++) pM[i - 1].Set(i); cout << pM[3].Get() << endl; cout << pM[5].Get() << endl;
Yuqoridagi dastur fragmentida massiv obektlar ichki o‘zgaruvchi 1 qiymatiga initsializatsiya qilinadi, chunki bu qiymat Cmonth() parametrlarisiz konstruktorda o‘rnatiladi. Bu konstruktor massiv uchun initsializator vazifasini bajaradi. Biroq, sinf boshqa konstruktorni amalga oshiradi, yaʻni konstruktor bilan 1 qiymatli parametr yoki parametrli konstruktorni. C++ sintaktikiga ko‘ra, massiv obektlarini parametrli konstruktor bilan ishga tushirib bo‘lmaydi. Shuning uchun, cmonth sinf parametrlar siz konstruktor amalga oshirish kerak. Cmonth() parametrsiz konstruktor sinf dastur fragmentidan olib tashlansa,massiv obektlar uchun xotira ajratish mumkin bo‘lmaydi. Bitta obʻyektlar uchun xotira ajratish mumkin, massiv uchun mumkin emas. Agar maʻlum bir sinf massiv obʻyektlari uchun xotira ajratish kerak bo‘lsa, bu sinf parametrlarsiz konstruktorga ega bo‘lishi va bajarilishi kerak. Massiv o‘lchamini dinamik kattalashtirish (kichiklashtirish) uchun xotira ajratish va foydalanish. Tuzilmalar uchun xotirani qayta ajratish, tuzilmalarni ishga tushirish. masalan, Dayweek tuzilishi tip uchun xotira qayta ajratish jarayoni ko‘rsatiladi. Xotirani dinamik ravishda ajratish va qayta ajratish bu usulning xotirani statik ajratishga nisbatan asosiy afzalligi hisoblanadi. Kerak bo‘lganda va kerak bo‘lganda dasturda xotira ajratishingiz mumkin. Dayweek tuzilishi parametrlarsiz konstruktor yordamida amalga oshiriladi (yuqoridagidek). Download 1.83 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling