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: