3.4. Ob’yektlar massivi Key Point. Xuddi oddiy qiymatlar massivi yoki satrlar kabi, ixtiyoriy ob’yektlarning massivini yaratish mumkin. Biz 1-semestrda oddiy tur elementlari massivi va satrlarini hosil qilishni o`rgandik. Shuningdek, biz ixtiyoriy ob’yektlar massivini ham hosil qilishimiz mumkin. Misol uchun quyidagi operator 10 Circle ob’yektidan iborat massivni e’lon qiladi:
Circle circleArray[10]; //O‘nta Circle ob’yektidan iborat massiv e’loni Massiv nomi - circleArrayva massivdagi har bir elementni yuklash (qiymat berish) uchun argumentsiz konstruktor chaqiriladi. Shunday qilib, circleArray[0].getRadius()1 ni qaytaradi, chunki argumentsiz konstruktorda radius qiymati 1 ga teng qilib olingan.
Shuningdek, biz massivni e’lon qilish va yuklash uchun argumentli konstruktor yuklovchisidan ham foydalanishimiz mumkin. Masalan,
Circle circleArray[3] = {Circle(3), Circle(4), Circle(5)};
3.5-kodli ro`yxatda ob’yektlar massividan foydalanishni tasvirlovchi misol berilgan. Dastur doiralar yuzalarining yig`indisini hisoblaydi. U o`nta Circle ob’yektlaridan iborat circleArray massivini hosil qiladi; keyin u mos ravishda, doiralarga 1, 2, 3, 4,…, 10 qiymatlardagi radisularni o`rnatadi va massivdagi doiralarning umumiy yuzasini ko`rsatadi.
3.5-kodli ro`yxat. UmumiyYuza.cpp 1 #include 2 #include 3 #include "CircleWithPrivateDataFields.h" 4 using namespace std;
5
6 // Doira yuzalarini qo`shish
7 double sum(Circle circleArray[], int size)
8 {
9 // sumni yuklash
10 double sum = 0;
11
12 // sum ga yuzalarni qo`shish
13 for (int i = 0; i < size; i++)
14 sum += circleArray[i].getArea();
15
16 return sum;
17 }
18
19 // Doiralar massivi va umumiy yuzasini chop etish
20 void printCircleArray(Circle circleArray[], int size)
21 {
22 cout <35) << left <<"Radius" << setw(8) <<"Area" << endl;
23 for (int i = 0; i < size; i++)
24 {
25 cout <35) << left << circleArray[i].getRadius()
26 <8) << circleArray[i].getArea() << endl;
27 }
28
29 cout <<"-----------------------------------------" << endl;
30
31 // Natijani hisoblash va ko`rsatish
32 cout <35) << left <<"Doiralarning umumiy yuzasi: " 33 <8) << sum(circleArray, size) << endl;
34 }
35
36 int main()
37 {
38 const int SIZE = 10;
39
40 // 1 radiusli Circle ob’yektini hosil qilish
41 Circle circleArray[SIZE];
42
43 for (int i = 0; i < SIZE; i++)
44 {
45 circleArray[i].setRadius(i + 1);
46 }
47
48 printCircleArray(circleArray, SIZE);
49
50 return 0;
51 }
Natija:
Dastur 10 ta Circle ob’yektini hosil qiladi (41-qator). Avvalgi ikkita ma’ruzada Circle sinflari taqdim etilgan edi. Mazkur misolda 2.7-kodli ro`yxatning 3-qatorida e’lon qilingan Circle sinfidan foydalaniladi.
Massivdagi ob’yektning har bir elementi argumentsiz Circle konstruktori yordamida yaratiladi. Har bir doira uchun yangi radiuslar 43-46-qatorlarda beriladi. circleArray[i]massivda Circle ob’yektiga murojaat qiladi. Dasturning 45-qatorida circleArray[i].setRadius(i+1)Circle ob’yektida yangi radius o`rnatadi. Dasturning 48-qatorida esa, massiv har bir doira yuzasi va radusini, shuningdek, umumiy yuzani ko`rsatuvchi printCircleArray funksiyasiga yuboriladi.