Raqamli texnologiyalar fakulteti dasturiy injiniring yo’nalishi



Download 1,57 Mb.
bet22/81
Sana23.06.2022
Hajmi1,57 Mb.
#695199
1   ...   18   19   20   21   22   23   24   25   ...   81
Bog'liq
Dasturiy injiniring Dasturlash 2-4

Qiymatli konteynerlar – bu obyektlarning nusxalarini saqlaydigan kompozitsiyalar (va shuning uchun bu nusxalarni yaratish / yo'q qilish uchun javobgardir).
Havola konteynerlari – boshqa obyektlarga ko'rsatgichlar yoki havolalarni saqlaydigan agregatsiyadir(shuning uchun bu ob'ektlarni yaratish/yo'q qilish uchun javobgar emas).
Haqiqiy hayotdan farqli o'laroq, konteynerlar o'z ichiga joylashtirilgan har qanday turdagi obyektni saqlashi mumkin bo'lsa, C++ da konteynerlar odatda faqat bitta ma'lumot turini o'z ichiga oladi. Misol uchun, agar sizda butun sonli massiv bo'lsa, u faqat butun son qiymatlarini o'z ichiga olishi mumkin. Boshqa ba'zi dasturlash tillaridan farqli o'laroq, C++ bir xil konteyner ichida turli xil ma'lumotlar turlarini aralashtirishga ruxsat bermaydi. Agar sizga int va double qiymatlarini saqlash uchun konteynerlar kerak bo'lsa, unda siz ikkita alohida konteyner yozishingiz kerak bo'ladi (yoki biz tegishli darsda gaplashgan shablonlardan foydalaning). Foydalanish cheklovlariga qaramay, konteynerlar juda foydali, chunki ular dasturlashni oson, xavfsizroq va tezroq qiladi.
Massiv konteyner sinfi. Endi biz C++ tilida konteynerlar funksiyasini amalga oshirgan holda noldan butun sonli massiv sinfini yozamiz. Ushbu massiv klassi elementlarning o'zi emas, balki ularning nusxalarini saqlaydigan qiymat konteyneri turiga kiradi.
Birinchidan, ArrayInt.h faylini yaratamiz:

#ifndef ARRAYINT_H


#define ARRAYINT_H
class ArrayInt
{
};
#endif

Bizning ArrayInt ikkita qiymatni kuzatishi kerak: ma'lumotlar va uning uzunligi. Biz massivimiz uzunligini o‘zgartirish imkoniyatiga ega bo‘lishini xohlayotganimiz uchun biz dinamik xotira ajratishdan foydalanishimiz kerak, ya’ni ma’lumotlarni saqlash uchun ko‘rsatgichdan foydalanamiz:


#ifndef ARRAYINT_H


#define ARRAYINT_H
class ArrayInt
{
private:
int m_length;
int *m_data;
};
#endif

Endi biz ArrayInt sinfi obyektlarini yaratish imkoniyatiga ega bo'lish uchun konstruktorlarni qo'shishimiz kerak. Biz ikkita konstruktorni qo'shamiz: birinchisi bo'sh massivni yaratadi, ikkinchisi berilgan o'lchamdagi massivni yaratadi:


#ifndef ARRAYINT_H


#define ARRAYINT_H
#include
class ArrayInt
{
private:
int m_length;
int *m_data;
public:
ArrayInt():
m_length(0), m_data(nullptr)
{
}
ArrayInt(int length):
m_length(length)
{
assert(length >= 0);
if (length > 0)
m_data = new int[length];
else
m_data = nullptr;
}
};
#endif

Bizga ArrayIntni tozalaydigan funksiyalar ham kerak. Birinchidan, dinamik ravishda ajratilgan har qanday xotirani shunchaki ajratadigan destruktorni qo'shamiz. Ikkinchidan, biz massivni o'chiradigan va uning uzunligini 0 ga qaytaradigan erase() funksiyasini yozamiz:


~ArrayInt()


{
delete[] m_data;
// Bu yerda m_data uchun null belgilash yoki
//m_length = 0 qilish shart emas, chunki obyekt baribir yo'q qilinadi.
}
void erase()
{
delete[] m_data;
// Bu yerda biz m_data ni nullptr ga o'rnatishimiz kerak,
//shunda chiqishda osilgan ko'rsatkich bo'lmaydi.
m_data = nullptr;
m_length = 0;
}

Endi massiv elementlariga kirish uchun indekslash operatorini [] qayta yuklaymiz. Shuningdek, biz o'tgan indeksni tekshirishni amalga oshirishimiz kerak, bu eng yaxshi assert bayonoti bilan amalga oshiriladi. Massiv uzunligini qaytarish uchun yordamchi funksiyani ham qo‘shamiz:



Download 1,57 Mb.

Do'stlaringiz bilan baham:
1   ...   18   19   20   21   22   23   24   25   ...   81




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish