O`zbekiston respublikasi oliy va o’rta maxsus ta`lim vazirligi samarqand davlat universiteti raqamli texnologiyalar fakulteti dasturiy injiniring yo’nalishi



Download 187,5 Kb.
Sana29.06.2022
Hajmi187,5 Kb.
#718339
Bog'liq
ENUM SINFLARI.




O`ZBEKISTON RESPUBLIKASI OLIY VA
O’RTA MAXSUS TA`LIM VAZIRLIGI SAMARQAND DAVLAT
UNIVERSITETI RAQAMLI TEXNOLOGIYALAR
FAKULTETI DASTURIY INJINIRING YO’NALISHI
209-GURUH TALABASI TINCHLIKOV ELDORNING
DASTURLASH ASOSLARI FANIDAN

MUSTAQIL ISH

MAVZU : ENUM SINFLARI.

BAJARDI : TINCHLIKOV E.
TEKSHIRDI : ESHONQULOV E.
SAMARQAND 2022

22. Enum sinflari.
Enumlar C++ tilida alohida ma’lumotlar turlari hisoblansa-da, ular birinchi qarashda ko‘rinadigan darajada xavfsiz emas va ba’zi hollarda mantiqiy bo‘lmagan ishlarni bajarishga imkon beradi. Misol uchun:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

#include
int main()
{
enum Fruits
{
LEMON, // LEMON bilan bir xil doirada MEVALAR
KIWI
};
enum Colors
{
PINK, // PUSHTI bilan bir xil doirada RANG
KULRANG
};
Fruits fruit = LEMON; // MEVA va LEMON bir xil miqyosda mavjud (prefiks qo'shish shart emas)
Colors color = PINK; // RANG va PINK bir xil miqyosda mavjud (prefiks qo'shish shart emas)
if (fruit == color) // kompilyator bu o'zgaruvchilarni butun sonlar sifatida tasniflanadi
std::cout << " meva va rang teng \n"; // va ular teng ekanligini toping!
else
std::cout << " meva va rang bir xil emas \n";
return 0;
}

C++ meva va rang o'zgaruvchilarni solishtirganda, ularni bilvosita butun son qiymatlariga aylantiradi va bu butun sonlarni taqqoslaydi. Ushbu ikki o'zgaruvchining qiymatlari 0 qiymatiga ega bo'lgan hisoblagichlar bo'lganligi sababli, bu yuqoridagi misolda meva = rang ekanligini anglatadi. Va bu unchalik bo'lmasligi kerak, chunki meva va rang turli xil ro'yxatga olingan va ularni umuman taqqoslab bo'lmaydi (meva va rang!). Muntazam hisoblagichlar bilan bunday taqqoslashlarning oldini olishning iloji yo'q.


Ushbu muammoni hal qilish uchun C ++ 11 enum sinflarini (yoki "ko'lamli enumlar") qo'shdi, ular siz allaqachon tushunganingizdek, barcha qoidalari bilan mahalliy qamrovni qo'shadi. Bunday sinfni yaratish uchun sanab o'tilgandan keyin darhol class kalit so'zini qo'shish kifoya. Misol uchun:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

#include
int main()
{
enum class Fruits // enumga "sinf" qo'shilishi standart "global" enum o'rniga ko'lamli enumni belgilaydi
{
LEMON, // LEMON bilan bir xil doirada Fruits
KIWI
};
enum class Colors
{
PINK, // PINK bilan bir xil doirada Colors
GRAY
};
Fruits fruit = Fruits::LEMON; // Eslatma: LEMON bevosita mavjud emas, biz foydalanishimiz kerak Fruits::LEMON
Colors color = Colors::PINK; //Eslatma: PINK bevosita mavjud emas, biz foydalanishimiz kerak Colors::PINK
if (fruit == color) // kompilyatsiya xatosi, chunki kompilyator turli turlarni solishtirishni bilmaydi:Fruits и Colors
std::cout << " meva va rang teng \n";
else
std::cout << " meva va rang bir xil emas \n";
return 0;
}

Standart hisoblagichlar raqamning o'zi (global miqyosda) bilan bir xil doirada, shuning uchun siz ularga to'g'ridan-to'g'ri kirishingiz mumkin (masalan, PINK). Biroq, har bir sanab o'tuvchining ko'lamini uning ro'yxati doirasiga cheklaydigan sinf qo'shilishi bilan unga kirish uchun qamrovni aniqlash operatori kerak bo'ladi (masalan, Colors::PINK). Bu nomlarning to'qnashuvi xavfini sezilarli darajada kamaytiradi.


Hisoblagichlar enum sinfining bir qismi bo'lganligi sababli, identifikatorlarni prefikslashning hojati yo'q (masalan, siz COLOR_PINK o'rniga PINK dan foydalanishingiz mumkin, chunki Colors::COLOR_PINK allaqachon ortiqcha bo'lar edi).
Enum sinflarining qat'iy turdagi qoidalari har bir enum sinfining o'ziga xos tip deb hisoblanishini anglatadi. Bu shuni anglatadiki, kompilyator turli xil raqamlardagi raqamlarni taqqoslay olmaydi. Agar siz buni qilishga harakat qilsangiz, kompilyator xatoga yo'l qo'yadi (yuqoridagi misolda bo'lgani kabi). Shu bilan birga, siz bir xil enum sinfidagi hisoblagichlarni solishtirishingiz mumkinligiga e'tibor bering (chunki bu hisoblagichlar bir xil turdagi):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

#include
int main()
{
enum class Colors
{
PINK,
GRAY
};
Colors color = Colors::PINK;
if (color == Colors::PINK) // bu odatiy
std::cout << "The color is pink!\n";
else if (color == Colors::GRAY)
std::cout << " Rangi kulrang!\n";
return 0;
}

Enum sinflari bilan kompilyator endi enum qiymatlarini bilvosita butun sonlarga aylantira olmaydi. Bu yaxshi! Ammo ba'zida siz ushbu xususiyatni qaytarishingiz kerak bo'lgan holatlar bo'lishi mumkin. Bunday hollarda, static_cast operatoridan foydalanib, aniq sanab o'tuvchini int ga yuborishingiz mumkin:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

#include
int main()
{
enum class Colors
{
PINK,
GRAY
};
Colors color = Colors::GRAY;
std::cout << color; // ishlamaydi, chunki turga aniq konvertatsiya yo'q int
std::cout << static_cast(color); // natija bo'ladi 1
return 0;
}

Agar siz C++ 11 ni qo'llab-quvvatlaydigan kompilyatordan foydalanayotgan bo'lsangiz, u holda enum sinflari o'rniga oddiy enumlardan foydalanishning ma'nosi yo'q.
E'tibor bering, sinf kalit so'zi, statik kalit so'z bilan bir qatorda, C++ tilida eng chalkash so'zlar qatoriga kiradi, chunki natija foydalanish holatiga (kontekst) juda bog'liq. Enum sinflari class kalit so'zidan foydalanishiga qaramasdan, ular C++ tilida an'anaviy "sinflar" hisoblanmaydi. An'anaviy darslar haqida biroz keyinroq gaplashamiz.

ELDOR TINCHLIKOV


Download 187,5 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish