1. Załóżmy robisz sobie obsługę klawiatury (np winapi, sfml). Wszystko w komputrze to liczby. Np klawisz A może zostać oznaczony jako 0, B jako 1, enter jako 1500100900. Załóżmy mamy taki pseudokod:
if (czyKlawiszWcisnietyJest(0));
Taki pseudokod może oznaczać - sprawdź czy został wciśniety klawisz A. Tylko czemu człowiek ma pamiętać te wszystkie wartości? Nie lepiej jakby człowiek mógł się odwołać po nazwie zwyczajowej? Do tego właśnie służy enum. Nie trzeba pamiętać wszystkich numerów klawiszy, a tylko ich nazwy:
enum Klawiatura {A, B, C, D, ..., ENTER, BACKSPACE, NAJGORSZY_KLAWISZ_INSERT}
if (czyKlawiszWcisnietyJest(Klawiatura::A));
if (czyKlawiszWcisnietyJest(Klawiatura::ENTER));
Podobnie można zrobić z obsługą zdarzeń czy stanów gry (gra, menu, opcje itp itd):
int gameState = 1;
if (gameState == 0) std::cout << "Gra" << "\n";
else if (gameState == 1) std::cout << "Opcje" << "\n";
else if (gameState == 2) std::cout << "Menu" << "\n";
I porównanie do:
enum GameState {GAME=0, OPTIONS, MENU} gameState;
gameState = OPTIONS;
if (gameState == GAME) std::cout << "Gra" << "\n"
else if (gameState == OPTIONS) std::cout << "Opcje" << "\n"
else if (gameState == MENU) std::cout << "Menu" << "\n";
PS. Enum można też połączyć z instrukcją switch,
2. Bo tak.