Dasturlash II 1-hafta mavzu: Sinf va ob’ektlarni e’lon qilinishi. Konstruktor va destruktor tushunchasi



Yüklə 1,02 Mb.
səhifə3/7
tarix28.12.2021
ölçüsü1,02 Mb.
#48090
1   2   3   4   5   6   7
D2 maruza-1

1.3. Misol: Sinflarni aniqlash va ob’yektlarni yaratish

Key Point. Sinflar ob’yektlar uchun aniqlovchi hisoblanadi, ob’yektlar esa, sinflardan yaratiladi.

1.1-kodli ro`yxat – sinflar va ob’yektlarni namoyish qiluvchi dastur. U uchta doira ob’yektini 1.0, 25 va 125 radiuslari bilan yaratadi hamda har bir maydonni va radiusni ko`rsatadi. Ikkinchi ob’yekt radiusini 100 ga o`zgartiring va uni yangi radius va maydonda ko`rsating.



1.1-kodli ro`yxat.

  1. #include

  2. using namespace std;



  3. class Circle

  4. {

  5. public:

  6. // doira radiusi

  7. double radius;



  8. // Jimlk qoidasi bo`yicha sinf konstruktori

  9. Circle()

  10. {

  11. radius = 1;

  12. }



  13. // Sinf konstruktori

  14. Circle(double newRadius)

  15. {

  16. radius = newRadius;

  17. }



  18. // Doira maydonining qaytarilishi

  19. double getArea()

  20. {

  21. return radius * radius * 3.14159;

  22. }

  23. }; // nuqtali vergul qo`yish zarur



  24. int main()

  25. {

  26. Circle circle1(1.0);

  27. Circle circle2(25);

  28. Circle circle3(125);



  29. cout << "Radiusli doira maydoni " << circle1.radius << " radiusda " << circle1.getArea() << endl;

  30. cout << "Radiusli doira maydoni " << circle2.radius << " radiusda " << circle2.getArea() << endl;

  31. cout << "Radiusli doira maydoni " << circle3.radius << " radiusda " << circle3.getArea() << endl;



  32. // Doira radiusiga o`zgartirish kiritish

  33. circle2.radius = 100;

  34. cout << "Radiusli doira maydoni " << circle2.radius << " radiusda " << circle2.getArea() << endl;



  35. return 0;

  36. }

Natija:
Radiusli doira maydoni 1 radiusda 3.14159

Radiusli doira maydoni 25 radiusda 1963.49

Radiusli doira maydoni 125 radiusda 49087.3

Radiusli doira maydoni 100 radiusda 31415.9
Bu yerda, 4-27-satrlarda sinf aniqlanyapti. Shuni unutmaslik kerakki, 27-satr so`ngida nuqtali-vergul (;)ni ishlatish majburiy shart.

6-satrdagi public kalit so`zi sinf ob’yektlaridan ruxsat berish mumkin bo`lgan barcha ma’lumot maydonlari, konstruktorlar va funksiyalarni ifodalaydi. Agar biz public kalit so`zini ishlatmasak, ko`rinish jimlik qoidasiga ko`ra yopiqligicha qoladi. Qismiy ko`rinishlarni keying darslarda ko`rib chiqamiz.

Asosiy funksiya uchta ob’yektni circle1, circle2 va circle3 nomlari hamda mos ravishda 1.0, 25 va 125 radiuslar bilan hosil qiladi (31-33-satrlar). Bu ob’yektlar turli radiuslarga, ammo bir xil funksiyaga ega. Shuning uchun biz ularning mos qismlarini getArea() funksiyasi yordamida hisoblashimiz mumkin. Ma’lumot maydonlariga ruxsat ob’yektlar orqali, mos ravishda circle1.radius, circle2.radius va circle3.radius yordamida olinishi mumkin.

Bu uchala ob’yekt mustaqil ob’yektlar hisoblanadi. 43-satrda circle2 radiusi 100 qiymatga o`zgartirilgan. Ob’yektning yangi radiusi va yuzi 44-45 satrlarda ko`rsatilgan.

Boshqa bir misol sifatida televizorlarni ko`rib chiqamiz. Har bir televizor – alohida holat (joriy kanal, tovushning joriy darajasi, o`chiq yoki yoniqligi)ga va xususiyatlar (kanallarni o`zgartirish, tovushni sozlash, yoqish/o`chirish)ga ega ob’yekt. Biz televizorlarni modellashtirish uchun sinflardan foydalanishimiz mumkin. Sinf uchun UML diagrammasi 1.4-rasmda keltirilgan.



1.4-rasm. Televizorlar uchun TV sinfi

1.2-kodli ro`yxatda TV sinfini aniqlovchi va ikkita ob’yektni yaratish uchun TV sinfi qo`llanilishiga oid dastur kodi berilgan.



1.2-kodli ro`yxat.

  1. #include

  2. using namespace std;



  3. class TV

  4. {

  5. public:

  6. int channel;

  7. int volumeLevel; // Tovush darajasi jimlik qoidasiga ko`ra 1 ga teng

  8. bool on; // Jimlik qoidasiga ko`ra TV o`chgan



  9. TV()

  10. {

  11. channel = 1; // Jimlik qoidasiga ko`ra kanal 1 ga teng

  12. volumeLevel = 1; // Jimlik qoidasiga ko`ra tovush darajasi 1 ga teng

  13. on = false; // Jimlik qoidasiga ko`ra TV o`chgan

  14. }



  15. void turnOn()

  16. {

  17. on = true;

  18. }



  19. void turnOff()

  20. {

  21. on = false;

  22. }



  23. void setChannel(int newChannel)

  24. {

  25. if (on && newChannel >= 1 && newChannel <= 120)

  26. channel = newChannel;

  27. }



  28. void setVolume(int newVolumeLevel)

  29. {

  30. if (on && newVolumeLevel >= 1 && newVolumeLevel <= 7)

  31. volumeLevel = newVolumeLevel;

  32. }



  33. void channelUp()

  34. {

  35. if (on && channel < 120)

  36. channel++;

  37. }



  38. void channelDown()

  39. {

  40. if (on && channel > 1)

  41. channel--;

  42. }



  43. void volumeUp()

  44. {

  45. if (on && volumeLevel < 7)

  46. volumeLevel++;

  47. }



  48. void volumeDown()

  49. {

  50. if (on && volumeLevel > 1)

  51. volumeLevel--;

  52. }

  53. };



  54. int main()

  55. {

  56. TV tv1;

  57. tv1.turnOn();

  58. tv1.setChannel(30);

  59. tv1.setVolume(3);



  60. TV tv2;

  61. tv2.turnOn();

  62. tv2.channelUp();

  63. tv2.channelUp();

  64. tv2.volumeUp();



  65. cout << "1-TV kanali" << tv1.channel

  66. << " va tovush darajasi: " << tv1.volumeLevel << endl;

  67. cout << "2-TV kanali " << tv2.channel

  68. << " va tovush darajasi: " << tv2.volumeLevel << endl;



  69. return 0;

  70. }

Natija:


1-TV kanali 30 va tovush darajasi: 3

2-TV kanali 3 va tovush darajasi: 2


E’tibor bering, TV o`chgan vaqtda uning kanali va tovush darajasi o`zgarmaydi. Kanalni yoki tovush darajasini o`zgartirishdan oldin kanal yoki tovush darajasining to`g`ri diapazonda turganlik xususiyati tekshiriladi.

Dastur 67-72-satrlarda ikkita ob’yektni hosil qiladi va kanallarni hamda tovush darajalarini sozlashga oid ishlarni bajarish uchun ob’yektlarning funksiyalarini chaqiradi. Dastur 78-81-satrlarda ob’yektlar holatlarini ko`rsatadi. 68-satrda esa, funksiya tv1.turnOn() sintaksis asosida chaqiriladi. Ma’lumotlar maydoniga ruxsat tv1.channel sintaksis asosida amalga oshiriladi (78-satr).

Bu misollar bizda sinflar va ob’yektlar haqida tasavvur uyg`otdi. Shu o`rinda konstruktorlar va ob’yektlar, ma’lumot maydonlariga ruxsat va ob’yektlarning funksiyalarini chaqirish haqida ko`plab savollar paydo bo`lishi mumkin. Keyingi qismlarda ushbu savollar batafsil yoritilgan.


Yüklə 1,02 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7




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

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin