38 / 90

C++ Enumeration (enum)

C++ enum (Sanash turlari)

Ro'yxatga olish - bu integral konstantalardan tashkil topgan foydalanuvchi tomonidan belgilangan ma'lumotlar turi. Ro'yxatni aniqlash uchun keyword enum ishlatiladi.

example.cpp
enum season { spring, summer, autumn, winter };

Bu erda ro'yxatning nomi mavsumdir.

Va bahor, yoz va qish mavsumi turlarining qadriyatlari.

Odatiy bo'lib, bahor - 0, yoz - 1 va hokazo. Deklaratsiya paytida siz enum elementining standart qiymatini o'zgartirishingiz mumkin (agar kerak bo'lsa).

example.cpp
enum season 
{   spring = 0, 
    summer = 4, 
    autumn = 8,
    winter = 12
};

Sanoqli turdagi deklaratsiya

Sanalgan turni yaratganingizda, faqat o'zgaruvchining sxemasi yaratiladi. Enum tipidagi o'zgaruvchilarni qanday yaratishingiz mumkin.

example.cpp
enum boolean { false, true };

// ichki funksiya
enum boolean check;

Bu erda enum boolean tipidagi o'zgaruvchan tekshiruv yaratiladi.

Turli sintaksis yordamida bir xil tekshirish o'zgaruvchisini e'lon qilishning yana bir usuli.

example.cpp
enum boolean 
{ 
   false, true
} check;

Misol: sanab turi

example.cpp
#include <iostream>
using namespace std;

enum week { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

int main()
{
    week today;
    today = Wednesday;
    cout << "Day " << today+1;
    return 0;
}

Chiqish

kod
Day 4

Misol: Enumlarning standart qiymatini o'zgartirish

example.cpp
#include <iostream>
using namespace std;

enum seasons { spring = 34, summer = 4, autumn = 9, winter = 32};

int main() {

    seasons s;

    s = summer;
    cout << "Summer = " << s << endl;

    return 0;
}

Chiqish

kod
Summer = 4

Nima uchun enumlar C++ dasturlashda ishlatiladi?

Enum o'zgaruvchisi ko'p mumkin bo'lgan qiymatlardan faqat bitta qiymatni oladi. Keling, bir misolni ko'rib chiqaylik.

example.cpp
#include <iostream>
using namespace std;

enum suit {
    club = 0,
    diamonds = 10,
    hearts = 20,
    spades = 3
} card;

int main() 
{
    card = club;
    cout << "Size of enum variable " << sizeof(card) << " bytes.";   
    return 0;
}

Chiqish

kod
Size of enum variable 4 bytes.

Buning sababi, butun sonning o'lchami 4 bayt. Bu enumni bayroqlar bilan ishlash uchun yaxshi tanlov qiladi.

Xuddi shu vazifani C++ structures yordamida bajarishingiz mumkin. Biroq, enumlar bilan ishlash moslashuvchanlik bilan birga samaradorlikni ham beradi.

Bayroqlar uchun enumlardan qanday foydalanish kerak?

Keling, bir misolni ko'rib chiqaylik.

example.cpp
enum designFlags {
	ITALICS = 1,
	BOLD = 2,
	UNDERLINE = 4
} button;

Aytaylik, siz Windows ilovasi uchun tugmani loyihalashtiryapsiz. Matn bilan ishlash uchun ITALICS, BOLD va UNDERLINE bayroqlarini o'rnatishingiz mumkin.

Yuqoridagi psevdokodda barcha integral konstantalar 2 ning darajalari ekanligining sababi bor.

example.cpp
// Ikkilik formatda

ITALICS = 00000001
BOLD = 00000010
UNDERLINE = 00000100

Integral konstantalar 2 ga teng bo'lganligi sababli, bitwise OR | operator yordamida bir vaqtning o'zida ikki yoki undan ortiq bayroqlarni bir-biriga yopishtirmasdan birlashtirishingiz mumkin. Bu bir vaqtning o'zida ikki yoki undan ortiq bayroqni tanlash imkonini beradi. Masalan,

example.cpp
#include <iostream>
using namespace std;

enum designFlags {
    ITALICS = 1,
    BOLD = 2,
    UNDERLINE = 4
};

int main() 
{
    int myDesign = BOLD | UNDERLINE; 

        // 00000010
        // | 00000100
        // ___________
        // 00000110

    cout << myDesign;

    return 0;
}

Chiqish

kod
6

Chiqish 6 ga teng bo'lsa, siz doimo BOLD va OTG CHIZIQ ishlatilishini bilasiz.

Bundan tashqari, siz o'zingizning talablaringizga bayroqlar qo'shishingiz mumkin.

example.cpp
if (myDesign & ITALICS) {
    // kursiv uchun kod
}

Bu erda biz dizaynimizga kursiv qo'shdik. E'tibor bering, faqat kursiv uchun kod if operatori ichida yozilgan.

C++ dasturlashda siz ro'yxatlardan foydalanmasdan deyarli hamma narsani bajarishingiz mumkin. Biroq, ular muayyan vaziyatlarda juda qulay bo'lishi mumkin. Bu yaxshi dasturchilarni ajoyib dasturchilardan ajratib turadigan narsa.