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.
#include
using namespace std;
class Circle
{
public:
// doira radiusi
double radius;
// Jimlk qoidasi bo`yicha sinf konstruktori
Circle()
{
radius = 1;
}
// Sinf konstruktori
Circle(double newRadius)
{
radius = newRadius;
}
// Doira maydonining qaytarilishi
double getArea()
{
return radius * radius * 3.14159;
}
}; // nuqtali vergul qo`yish zarur
int main()
{
Circle circle1(1.0);
Circle circle2(25);
Circle circle3(125);
cout << circle1.radius <<"radiusli doira yuzasi: " <
cout << circle2.radius <<"radiusli doira yuzasi: " <
cout << circle3.radius <<"radiusli doira yuzasi: " <
// Doira radiusiga o`zgartirish kiritish
circle2.radius = 100;
cout << circle2.radius <<"radiusli doira yuzasi: " <
return 0;
}
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 keyingi 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.
#include
using namespace std;
class TV
{
public:
int channel;
int volumeLevel; // Tovush darajasi jimlik qoidasiga ko`ra 1 ga teng
bool on; // Jimlik qoidasiga ko`ra TV o`chgan
TV()
{
channel = 1; // Jimlik qoidasiga ko`ra kanal 1 ga teng
volumeLevel = 1; // Jimlik qoidasiga ko`ra tovush darajasi 1 ga teng
on = false; // Jimlik qoidasiga ko`ra TV o`chgan
}
void turnOn()
{
on = true;
}
void turnOff()
{
on = false;
}
void setChannel(int newChannel)
{
if (on && newChannel >= 1 && newChannel <= 120)
channel = newChannel;
}
void setVolume(int newVolumeLevel)
{
if (on && newVolumeLevel >= 1 && newVolumeLevel <= 7)
volumeLevel = newVolumeLevel;
}
void channelUp()
{
if (on && channel < 120)
channel++;
}
void channelDown()
{
if (on && channel > 1)
channel--;
}
void volumeUp()
{
if (on && volumeLevel < 7)
volumeLevel++;
}
void volumeDown()
{
if (on && volumeLevel > 1)
volumeLevel--;
}
};
int main()
{
TV tv1;
tv1.turnOn();
tv1.setChannel(30);
tv1.setVolume(3);
TV tv2;
tv2.turnOn();
tv2.channelUp();
tv2.channelUp();
tv2.volumeUp();
cout << "1-TV kanali" << tv1.channel
<< " va tovush darajasi: " << tv1.volumeLevel << endl;
cout << "2-TV kanali " << tv2.channel
<< " va tovush darajasi: " << tv2.volumeLevel << endl;
return 0;
}
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.
Do'stlaringiz bilan baham: |