Informacje o nowych artykułach oraz akcjach edukacyjnych prosto na Twojej skrzynce e-mail!

Typ wyliczeniowy enum w C++

Typ wyliczeniowy enum w C++ daje programiście bardzo dużo ciekawych możliwości, a co najważniejsze rozwiązuje wiele problemów na jakie można natrafić podczas tworzenia oprogramowania. Takim podstawowym zastosowaniem typu wyliczeniowego enum jest na przykład możliwość bardzo sprawnego wysyłania argumentów do danej funkcji, które na dodatek są sprawdzane przez kompilator (nie ma możliwości wysłania innego typu argumentu niż ten, który został zdefiniowany przez programistę). Zobaczmy na przykładzie jak definiuje się typ enum:

enum nazwa_typu
{
     lista_wyliczeniowa
};
enum nazwa_typu
{
     lista_wyliczeniowa
};

Powyżej zdefiniowaliśmy nowy typ wyliczeniowy o nazwie co_robic. Oczywiście skoro co_robic jest typem to możemy tak jak w przypadku innych typów takich jak: int, char czy string zdefiniować odpowiednią zmienną:

co_robic no_wlasnie_co;

I tutaj pojawia się pytanie: co do tak zdefiniowanej zmiennej można zapisać? Oczywiście możemy tutaj przypisać tylko i wyłącznie jedną z pozycji zdefiniowaną na liście wyliczeniowej:

no_wlasnie_co = start; //ok, masz zacząć działać
no_wlasnie_co = idz; //ok, masz zacząć iść
no_wlasnie_co = stop; //ok, masz się zatrzymać

Zabronione są między innymi takie operacje:

no_wlasnie_co = 10; //to jest błąd!

Popatrzmy teraz na trochę inny przykład użycia typu wyliczeniowego enum:

enum operacjeNaTekstach 
{
    wypisz,
    zapisz,
    skasuj = 8,
    cosTam,
    nadpisz = wypisz + zapisz  //typ wyliczeniowy enum jest typem arytmetycznym więc czemu by nie dodać dwóch liczb?
};

Jak widać do niektórych pozycji na liście wyliczeniowej nie przypisaliśmy liczb. Co zatem będą one zawierać?

  1. wypisz będzie miało przypisane 0. Dlaczego? Ponieważ, jeżeli nie została podana żadna inna liczba to wyliczanie zaczynamy od 0,
  2. zapisz będzie zawierać 1, bo po 0 bierzemy następną cyfrę czyli 1,
  3. skasuj jak widać zawiera 8,
  4. cosTam będzie miało przypisane 9, bo po 8 kompilator weźmie następną liczbę,
  5. natomiast nadpisz ma zapisaną liczbę 0 + 1 czyli 1.

Należy pamiętać, że typ wyliczeniowy enum jest typem arytmetycznym, a więc możliwe są między innymi takie operacje:

enum jakisTyp
{
     nadpisz = wypisz + zapisz
};

Oczywiście typ wyliczeniowy nie musi zawierać jakiejś nazwy:

enum
{
    wypisz,
    zapisz,
    skasuj = 8,
    cosTam
};

Należy jednak pamiętać, że w tym przypadku nie będziemy mogli definiować nowych obiektów ponieważ nie znamy nazwy typu jakim chcemy się posłużyć.

Przykładowy program korzystający z typu wyliczeniowego bez nazwy:

#include <iostream>

using namespace std;

enum
{
    wypisz,
    zapisz,
    skasuj = 8,
    cosTam,
    nadpisz = wypisz + zapisz  //typ wyliczeniowy enum jest typem arytmetycznym więc czemu by nie dodać dwóch liczb?
};

int main()
{
    cout << wypisz; //wypisze 0
    cout << endl;
    cout << skasuj; //wypisze 8
    return 0;
}

Na początku tego artykułu wspomniałem iż typ wyliczeniowy można zastosować na przykład do przesyłania pewnych danych do funkcji. Poniżej więc przedstawiam przykładowy program, który wykorzystuję tę własność typu wyliczeniowego:

include <iostream>

using namespace std;

enum
{
    wypisz,
    zapisz,
    skasuj = 8,
    cosTam,
    nadpisz = wypisz + zapisz  //typ wyliczeniowy enum jest typem arytmetycznym więc czemu by nie dodać dwóch liczb?
};

void jakasFunkcja(int liczba) {
    cout << liczba; //wypisze 8
}

int main()
{
    jakasFunkcja(skasuj);
    return 0;
}

Fot: Samsung, Program „Mistrzowie kodowania”.

Spodobało się?

Jeśli tak, to zarejestruj się do newslettera aby otrzymywać informacje nowych artykułach oraz akcjach edukacyjnych. Gwarantuję 100% satysfakcji i żadnego spamowania!

, , ,

Dodaj komentarz

Odpowiedz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Pin It on Pinterest