static int numberOfObjects;
static int getNumberOfObjects();
3.6-kodli ro`yxatda yangi doira sinfi aniqlangan.
3.6-kodli ro`yxat. CircleWithStaticDataFields.h
1 #ifndef CIRCLE_H
2 #define CIRCLE_H
3
4 class Circle
5 {
6 public:
7 Circle();
8 Circle(double);
9 double getArea();
10 double getRadius();
11 void setRadius(double);
12 static int getNumberOfObjects();
13
14 private:
15 double radius;
16 static int numberOfObjects;
17 };
18
19 #endif
12-qatorda getNumberOfObjects statik funksiya, 16-qatorda esa, numberOfObjects statik o`zgaruvchi sinfda shaxsiy (private) ma’lumotlar maydoni sifatida e’lon qilingan.
3.7-kodli ro`yxatda Circle sinfi tadbiqi keltirilgan.
3.7-kodli ro`yxat. CircleWithStaticDataFields.cpp
1 #include "CircleWithStaticDataFields.h"
2
3 int Circle::numberOfObjects = 0;
4
5 // circle ob’yektni qurish
6 Circle::Circle()
7 {
8 radius = 1;
9 numberOfObjects++;
10 }
11
12 // circle ob’yektni qurish
13 Circle::Circle(double newRadius)
14 {
15 radius = newRadius;
16 numberOfObjects++;
17 }
18
19 // Mazkur doira yuzasini qaytarish
20 double Circle::getArea()
21 {
22 return radius * radius * 3.14159;
23 }
24
25 // Mazkur doira radiusini qaytarish
26 double Circle::getRadius()
27 {
28 return radius;
29 }
30
31 // Yangi radius qiymatini o`rnatish
32 void Circle::setRadius(double newRadius)
33 {
34 radius = (newRadius >= 0) ?newRadius :0;
35 }
36
37 // Doira ob’yektlari sonini qaytarish
38 int Circle::getNumberOfObjects()
39 {
40 return numberOfObjects;
41 }
Statik ma’lumotlar maydoni numberOfObjects 3-qatorda yuklanadi. Circle ob’yekt hosil qilinganda numberOfObjects bittaga oshadi (inkrementlanadi) (9-, 16-qatorlar).
Nusxa funksiyasi (masalan, getArea()) va nusxaning ma’lumotlar maydoni (masalan, radius) nusxaga bog`liq holda ishlaydi va undan faqatgina nusxa yaratilganda foydalanish mumkin. Ularga aniqlangan nusxada ruxsat etiladi. Statik funksiyalar (masalan, getNumberOfObjects()) va statik ma’lumotlar maydoni (masalan, numberOfObjects)ga ular uchun nomlangan sinfning ixtiyoriy nusxasidan murojaat uchun ruxsat beriladi.
3.8-kodli ro`yxatdagi dasturda nusxa hamda statik o`zgaruvchilar va statik funksiyalardan qanday foydalanish mumkinligini ko`rsatib berilgan va ularning samaradorligi tasvirlangan.
3.8-kodli ro`yxat. TestCircleWithStaticDataFields.cpp
1 #include
2 #include "CircleWithStaticDataFields.h"
3 using namespace std;
4
5 int main()
6 {
7 cout <<"Yaratilgan doira ob’yektlari soni: "
8 << Circle::getNumberOfObjects() << endl;
9
10 Circle circle1;
11 cout <<"Berilgan radiusdagi doira yuzasi: "
12 <" radiusda: " << circle1.getArea() << endl;
13 cout <<"Yaratilgan doira ob’yektlari soni: "
14 << Circle::getNumberOfObjects() << endl;
15
16 Circle circle2(5.0);
17 cout <<"Berilgan radiusdagi doira yuzasi: "
18 <" radiusda: " << circle2.getArea() << endl;
19 cout <<"Yaratilgan doira ob’yektlari soni: "
20 << Circle::getNumberOfObjects() << endl;
21
22 circle1.setRadius(3.3);
23 cout <<"Berilgan radiusdagi doira yuzasi: "
24 <" radiusda: " << circle1.getArea() << endl;
25
26 cout <<"circle1.getNumberOfObjects() qaytargan qiymat: "
27 <28 cout <<"circle2.getNumberOfObjects()qaytargan qiymat: "
29 <30
31 return 0;
32 }
Yaratilgan doira ob’yektlari soni: 0
Berilgan radiusdagi doira yuzasi: 1 radiusda: 3.14159
Yaratilgan doira ob’yektlari soni: 1
Berilgan radiusdagi doira yuzasi: 5 radiusda: 78.5397
Yaratilgan doira ob’yektlari soni: 2
Berilgan radiusdagi doira yuzasi: 3.3 radiusda: 34.2119
circle1.getNumberOfObjects() qaytargan qiymat: 2
circle2.getNumberOfObjects()qaytargan qiymat: 2
|
Statik o`zgaruvchilar va funksiyalar ob’yekt yaratilmay turib ruxsat etilgan bo`lishi mumkin. 8-qatorda ob’yektlar soni hech qanday ob’yekt yaratilmaganligi sababli, 0ni ko`rsatadi.
Asosiy funksiya circle1vacircle2 deb nomlangan ikkita doira yaratadi (10- va 16-qator). circle1 dagi nusxa radiusi 3.3 ga o`zgartiriladi (22-qator). Bu o`zgarish circle2 dagi nusxa o`zgaruvchisi radiusiga ta’sir ko`rsatmaydi, chunki nusxaning har ikkala o`zgaruvchisi ham o`zaro mustaqil. circle1 yaratilgandan so`ng, numberOfObjects statik o`zgaruvchining qiymati 1 ga o`zgaradi (10-qator) va circle2 yaratilgandan so`ng 2 bo`ladi (16-qator).
Sinf nusxasidagi statik ma’lumotlar maydonining maydonlari va funksiyalariga ruxsat olish mumkin. Masalan, 27-qatordagi circle1.getNumberOfObjects() va 29-qatordagi circle2.getNumberOfObjects()kabi. Lekin ularga ruxsatni sinf nomi orqali olish yaxshiroq, masalan, Circle:: ko`rinishida. Shunga e’tibor qaratish kerakki, 27-qatordagi circle1.getNumberOfObjects() va 29-qatordagi circle2.getNumberOfObjects() larni birgina Circle::getNumberOfObjects() bilan almashtirish mumkin. Bu o`qishni osonlashtiradi, chunki, bu orqali o`quvchi getNumberOfObjects() statik funksiyani tez tanib oladi.
Dostları ilə paylaş: |