Strona główna » Kursy » Kurs C++ » Typ wyliczeniowy enum
 

Typ wyliczeniowy enum

Typ wyliczeniowy

Typ wyliczeniowy enum jest to typ, który pozwala wyliczyć dane. Wartości tego typu są tekstami przez co nie trzeba pamiętać co oznacza, która wartość, ponieważ bardzo często krótki opis wystarczy. W celu zadeklarowania typu wyliczeniowego należy użyć słowa kluczowego enum, a następnie w nawiasach klamrowych podać wartości i rozdzielić je przecinkiem. Uwaga: Po zamknięciu nawiasu należy postawić średnik. Przykładowo deklaracja wygląda następująco:

  1. enum nowytyp {
  2.   wartosc1,
  3.   wartosc2,
  4.   wartosc3
  5. };

(1.) Deklarowany jest nowy typ zmiennej na podstawie enum o nazwie nowytyp. Następnie idzie deklaracja (2. - 4.) trzech wartości rozdzielonych przecinkiem. Takich wartości może być więcej lub mniej. (5.) Zakończ deklaracje.

Działanie

W celu zadeklarowania zmiennej należy podać nazwę nowego typu, nazwę zmiennej. W celu przypisania wartości wystarczy wybrać dowolną podaną w zadeklarowanym typie.

  1.   nowytyp dane = wartosc1;

Przypisane wartości można sprawdzać przy użyciu instrukcji if. W miejsce gdzie np. stałaby liczba należy podać prawidłową wartość dla tego typu danych.

  1.   if (dane == wartosc1)
  2.     cout << "Zmienna zawiera wartosc1\n";

Zastosowanie

Typ wyliczeniowy enum przydaje się w przypadku kwestionariuszy. O wiele jest łatwiej sprawdzić czy dana zmienna ma wartość dane, a nie zastanawiać się jaka liczba reprezentuje dane. Przypuśćmy, że pracujemy nad ankietą elektroniczną, która zapyta użytkownika z jakiego urządzenia korzysta.

Deklaracja typu

Pierwszy etap będzie polegał na tym, żeby zadeklarować urządzenia z których może korzystać użytkownik. Dla uproszczenie przyjmijmy, że będzie to komputer stacjonarny, smartfon oraz tablet. Wtedy deklaracja typu danych wygląda następująco:

  1. enum urzadzenie {
  2.   desktop,
  3.   tablet,
  4.   smartphone
  5. };

Wypisywanie typu

Po wprowadzeniu z pewnością przyda się wydobyć informację co wybrał użytkownik. Do tego celu najlepsza będzie instrukcja switch, która na podstawie wartości przekazanego argumentu wyświetli rodzaj urządzenia.

  1. void wypiszSprzet(urzadzenie u) {
  2.   switch (u) {
  3.     case desktop:
  4.       cout << "komputer stacjonarny";
  5.       break;
  6.     case tablet:
  7.       cout << "tablet";
  8.       break;
  9.     case smartphone:
  10.       cout << "smartfon";
  11.       break;
  12.     default:
  13.       cout << "nieznane urzadzenie";
  14.   }
  15.   cout << endl;
  16. }

Wczytywanie danych

Teraz pozostaje już tylko wczytać od użytkownika, ale pojawia się problem. urzadzenie to typ danych dla którego nie zostało określone jak mają być wczytywane dane prosto z konsoli. Istnieje jednak możliwość, aby to ominąć.

Typ wyliczeniowy przypoprządkowuje każdej kolejnej wartości kolejną liczbę począwszy od 0. W tym przypadku wartości desktop odpowiada 0, tablet 1, a smartphone 2. Rzutując wartość liczbową (0, 1, 2) na typ urzadzenie otrzymamy pożądaną wartość.

Główna funkcja

Prezentowana poniżej funkcja main() ma za zadanie wypisać dostępne urządzenia, a następnie wczytać od użytkownika jakiego urządzenia używa i wypisać co to jest na ekran.

  1. int main () {
  2.   int n;
  3.   cout << "Podaj urzadzenie z listy:\n";
  4.   for (int i = 1; i <= roznych_urzadzen; i++) {
  5.     cout << i << ") ";
  6.     wypiszSprzet((urzadzenie)(i - 1));
  7.   }
  8.   do {
  9.     cin >> n;
  10.   } while (n < 1 || n > roznych_urzadzen);
  11.   urzadzenie u = (urzadzenie)(n - 1);
  12.   cout << "Sprzet uzytkownika to: ";
  13.   wypiszSprzet(u);
  14.   system("pause");
  15.   return 0;
  16. }

(2.) Zadeklaruj zmienną n do wczytania danych. (3. - 7.) Wypisz listę wszystkich urządzeń. Ze względu na fakt, że typ enum nie wie ile ma wpisanych wartości to dodatkowo została zadeklarowana stała ROZNYCH_URZADZEN, która przechowuje ile jest urządzeń. (8. - 10.) Wczytaj od użytkownika dane, aż poda prawidłową opcję. (11.) Zadeklaruj zmienną typu urzadzenie na podstawie wczytanej wartości pomniejszonej o 1. (Dla ułatwienia wczytujemy od użytkownika wartości od 1 do 3, ale wartości w typie enum są numerowane od 0.) (12. - 13.) Wypisz sprzęt użytkownika i zakończ działanie programu.

Zadania

Zadanie 1

Napisz program, który poprosi użytkownika o wybranie ulubionego owocu spośród prezentowanych gatunków. Do wyboru powinno być co najmniej trzy owoce oraz opcja "żaden z wymienionych". Po wczytaniu od użytkownika nieprawidłowych danych powinien zostać wypisany stosowny komunikat. Na koniec wypisz czy użytkownik lubi ten sam owoc co autor kodu.