Dasturlash II 3-hafta mavzu: Ob’yektga yo‘naltirilgan fikrlash uslubi



Yüklə 2,27 Mb.
səhifə11/18
tarix11.11.2023
ölçüsü2,27 Mb.
#132197
1   ...   7   8   9   10   11   12   13   14   ...   18
D2 maruza-3 Ob’ektga yo‘naltirilgan fikrlash. String sinfi, ob’yektlar massivi

Maslahat. Statik funksiyani chaqirish uchun ClassName::functionName(arguments) dan va statik o`zgaruvchilarga murojaat uchun ClassName::staticVariable dan foydalaning. Chunki shunday qilinganda, foydalanuvchi statik funksiyani va sinf ma’lumotlarini osongina aniqlay oladi.


Maslahat. Siz nima deb o`ylaysiz, o`zgaruvchi yoki funksiya nusxa bo`lishi kerakmi yoki statik? Aniq bir sinf nusxasiga bog`liq (to’be) bo`lgan o`zgaruvchi yoki funksiya o`zgaruvchi yoki funksiya nusxasi bo`lishi kerak. Aniq bir sinf nusxasiga bog`liq (tobe) bo`lmagan o`zgaruvchi yoki funksiya statik o`zgaruvchi yoki funksiya bo`lishi kerak. Masalan, har bir doiraning o`z radiusiga ega. Radius aniq bir doiraga bog`liq (qaram, tobe). Shuning uchun, radiusCircle sinfi nusxasining o`zgaruvchisi hisoblanadi. getArea funksiya aniq bir doiraga tobe bo`lganligi uchun, u nusxa funksiyasi hisoblanadi. numberOfObjects hech qanday aniq bir nusxaga tobe bo`lmaganligi uchun, uni statik deb e’lon qilish kerak bo`ladi.
3.6. O`zgarmas a’zo funksiyalar
Key Point. C++ shuningdek, qandaydir obyektdagi ma’lumotlar maydoniga o`zgartirish kiritishi zarur emasligi haqida kompilyatorga xabar yuboruvchi o`zgarmas a’zo funksiyalarni qo`llashga ruxsat beradi.
Biz shu vaqtgacha kompilyatorga o`zgarmas parameter haqida xabar berish uchun const – kalit so`zidan foydalanib keldik. Shuningdek, biz kompilyatorga obyektdagi ma’lumotlar maydonini o`zgartirmaydigan o`zgarmas a’zo funksiya (yoki shunchaki, o`zgarmas funksiya) haqida ham const – kalit so`zidan foydalanib xabar berishimiz mumkin. Buning uchun const – kalit so`zini funksiya sarlavhasi oxiridan qo`yish kerak. Misol uchun, 3.6-kodli ro`yxatdagi Circle sinfini 3.6-kodli ro`yxatda ko`rsatilgani kabi qayta aniqlashimiz mumkin, 3.10-kodli ro`yxatda esa, bosh (kutubxona) fayl tadbiq qilingan.
3.10-kodli ro`yxat. CircleWithConstantMemberFunctions.h
1 #ifndef CIRCLE_H
2 #define CIRCLE_H
3
4 class Circle
5 {
6 public:
7 Circle();
8 Circle(double);
9 double getArea() const;
10 double getRadius() const;
11 void setRadius(double);
12 static int getNumberOfObjects();
13
14 private:
15 double radius;
16 static int numberOfObjects;
17 };
18
19 #endif
3.10-kodli ro`yxat. CircleWithConstantMemberFunctions.cpp
1 #include "CircleWithConstantMemberFunctions.h"
2
3 int Circle::numberOfObjects = 0;
4
5 // Doira ob’yektini qurish
6 Circle::Circle()
7 {
8 radius = 1;
9 numberOfObjects++;
10 }
11
12 // Doira ob’yektini qurish
13 Circle::Circle(double newRadius)
14 {
15 radius = newRadius;
16 numberOfObjects++;
17 }
18
19 // Ushbu doira yuzasini qaytarish
20 double Circle::getArea() const
21 {
22 return radius * radius * 3.14159;
23 }
24
25 // Ushbu doira yuzasini qaytarish
26 double Circle::getRadius() const
27 {
28 return radius;
29 }
30
31 // Yangi radius 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 }

Faqat nusxaning a’zo funksiyalarigina o`zgarmas funksiya sifatida aniqlanishi mumkin. O`zgarmas parametrlar singari, o`zgarmas funksiyalar ham himmoyalangan dasturlash uchun mo`ljallangan. Agar biz yaratgan o`zgarmas funksiyamiz xatolik sabab ob’yektdagi ma’lumotlar maydoniga o`zgartirish kiritsa, kompilyatsion xatolik haqida xabar chiqariladi. Shunga e’tibor qaratish kerakki, biz faqat nusxa o`zgarmas funksiyalarni aniqlashimiz mumkin, statik funksiyalarni emas. Nusxa get funksiyasi har doim o`zgarmas a’zo funksiya sifatida aniqlanishi mumkin, chunki u ob’yekt tarkibini o`zgartirmaydi.


Agar funksiya unga yuborilgan ob’yektni o`zgartirmaydigan bo`lsa, uning o`zgarmas parametrlarini const – kalit so`zi orqali, quyidagicha ko`rinishda aniqlash lozim:

Yüklə 2,27 Mb.

Dostları ilə paylaş:
1   ...   7   8   9   10   11   12   13   14   ...   18




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2025
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin