classPerson
{
private: Person supervisor; //The type for the data is the class itself
...
}
Agar, 3.14-rasmda ko`rsatilganidek, insonda bir nechta rahbar mavjud bo`lsa, rahbarlarni saqlash uchun massivdan foydalanishimiz mumkin (masalan, 10 ta rahbar).
3.14-rasm. Insonning bir nechta rahbari bo`lishi mumkin.
Eslatma. Shu o`rinda jamlanishlar va kompozitsiyalar sinflardan foydalangan holda, bir xil ko`rinishda taqdim etiladi, biz ularni farqlamaymiz, ularning har ikkalasini ham kompozitsiya deb ataymiz.
3.9. Amaliy qism: StackOfIntegers sinfi Key Point. Bu qismda steklarni modellashtiruvchi sinf loyihalashtiriladi. O`z tarkibida “oxiri kelgan birinchi chiqadi” qabilida ma’lumotlarni saqlovchi, ma’lumotlar tuzilmasi – stekka qayta murojaat qilamiz (3.15-rasm).
3.15-rasm. Stek o`zida “oxiri kelgan birinchi chiqadi” qabilida ma’lumotlarni saqlaydi Steklar ko`pgina dasturlarga ega. Masalan, kompilyator funksiyalarni chaqirish jarayonlarini amalga oshirish uchun stekdan foydalanadi. Funksiya chaqirilganda, uning parametrlari va lokal o`zgaruvchilari stekka ko`chiruvchi faol yozuv maydoniga joylashtiriladi. Funksiya boshqa bir funksiyani chaqirganida esa, yangi funksiyaning parametrlari va lokal o`zgaruvchilari stekka ko`chiruvchi yangi faol yozuv maydoniga joylashtiriladi. Funksiya o`z ishini tugatib, chaqiruvchiga qiymatni yuborganidan so`ng, u joylashgan faol yozuv maydoni stekdanolinadi.
Biz steklarni modellashtiruvchi sinf yaratishimiz mumkin. Soddaroq qilib olish uchun, faraz qilaylik, stek o`zida int qiymatlarni saqlaydi. Shunday qilib, stek sinfining nomini StackOfIntegersdeb olamiz. Sinf uchun UML diagramma 3.16-rasmda keltirilgan.
3.16-rasm.StackOfIntegers sinfi stekda saqlanuvchilarni inkapsulyatsiyalaydi va steklarni boshqarish operatsiyalarini taqdim etadi. Faraz qilaylik, 3.14-kodli ro`yxatda ko`rsatilgani kabi sinf mavjud. Keling, 3.15-kodli ro`yxatda sinfdan foydalanib (7-qator) tarkibida o`nta butun sonlar (0, 1, 2, … 9)ni saqlovchi stekni ishlatuvchi (9-10-qatorlar) va ularni teskari tartibda ko`rsatuvchi (12-13-qatorlar) testlash dasturini tuzamiz.
3.14-kodli ro`yxat. StackOfIntegers.h 1 #ifndefSTACK_H
2 #define STACK_H
3
4class StackOfIntegers
5 {
6public:
7 StackOfIntegers();
8 bool isEmpty() const;
9 int peek() const;
10 void push(int value);
11 int pop();
12 int getSize() const;
13
14private:
15 int elements[100];
16 intsize;
17 };
18
19 #endif 3.15-kodli ro`yxat. TestStackOfIntegers.cpp 1 #include 2 #include "StackOfIntegers.h" 3 using namespace std;
4
5 int main()
6 {
7 StackOfIntegers stack;
8
9 for (int i = 0; i <10; i++)
10 stack.push(i);
11
12 while (!stack.isEmpty())
13 cout <" ";
14
15 return 0;
16 }
Xo`sh, StackOfIntegers sinfini qanday tadbiq qilamiz? Stek elementlari elements deb nomlangan massivda saqlanadi. Biz stek hosil qilganimizda massiv ham hosil qilinadi. Parametrsiz no-arg konstruktor sizeni0 teng qiymat bilan yuklaydi. size o`zgaruvchisi stekdagi elementlar sonini hisoblaydi va size-1 stekning yuqori elementi indeksi sanaladi (3.17-rasm). size 0 ga teng bo`lgan bo`sh stek uchun.