Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: 'DeBugger'
Kurs C++

Typ wyliczeniowy enum

[lekcja] Co to jest typ wyliczeniowy enum i jak się z niego korzysta.

Wstęp

Enum to rodzaj danych, który zawiera już listę wartości, jaką można nadać zmiennej własnego typu enum. Taki typ poprzedza słowo kluczowe enum.

Przykład

Aby zobrazować, jak działa enum, najpierw chciałbym napisać kod:
C/C++
#include <iostream>
using namespace std;
enum wlasny_enum
{
    przyklad0 = 0, //zamiast średników stosuje się przecinki
    przyklad1 = 1,
    przyklad2 = 2,
    //...
    przykladktorystam //przy "wartości" ostatniej przecinka nie stosuje się
};
int main()
{
    wlasny_enum nowy;
    nowy = przyklad0; //przypisanie wartosci
    cout << nowy << endl; //strumień
    getchar();
}
W tym typie, tak jak to napisałem w komentarzu, używa się przecinków. Zawsze przy ostatnim elemencie takowego nie poleca się używać.
Teraz przekształć program tak, aby wszystkie "elementy" miały przecinek na końcu. Nie powinno się go robić. Nasza zmienna przyjmuje wartość elementu, jaki napisany jest po operatorze =. Uwaga: w wartościach mogą znajdować się tylko liczby całkowite. Nie możesz używać np. znaków char(tzn. możesz, jednak zamiast sensownego znaku program zwróci jego kod ASCII).

O "wartości początkowej"

Teraz przekształć program tak, aby zmienna `nowy` nie miała początkowej wartości(14 linika). Program wywala nam jakąś liczbę z nikąd. Zmienna, która nie ma wartości początkowej, przyjmuje wartość zmiennej, która była niegdyś zapisana w komórce, w której aktualnie zapisana jest nasza zmienna.
Nie trzeba też nadawać poszczególnym elementom wartości. Same one ją znajdą, korzystając z ilości elementów(podobnie jest z tablicami, gdzie indeksowanie zaczyna się od zera).
C/C++
#include <iostream>
using namespace std;
enum wlasny_enum
{
    przyklad0,
    przyklad1,
    przyklad2
};
int main()
{
    wlasny_enum nowy = przyklad0;
    cout << nowy << endl;
    nowy = przyklad1;
    cout << nowy << endl;
    nowy = przyklad2;
    cout << nowy << endl;
    getchar();
}

Wykorzystywanie składników enum

Nie trzeba tworzyć zmiennej nowego enuma, żeby z niego skorzystać.
C/C++
#include <iostream>
using namespace std;
enum wlasny_enum
{
    przyklad0 = 0,
    przyklad1 = 1,
    przyklad2 = 2,
    //...
    przykladktorystam,
    przyklad
};
int suma_liczb_naszego_enuma()
{
    return wlasny_enum( przyklad0 ) + wlasny_enum( przyklad1 ) + wlasny_enum( przyklad2 ) + wlasny_enum
    ( przykladktorystam ) + wlasny_enum( przyklad ); //wykorzystujemy składniki enuma, bez inicjalizaci przykładowej zmiennej
}
int main()
{
    cout << suma_liczb_naszego_enuma() << " " << wlasny_enum( przyklad ) << endl; //strumień
    getchar();
}
Aby skorzystać z składnika enum, umieść go w nawiasie. Tutaj widzimy funkcję zwracającą sumę naszego enuma, korzystającą z jego struktury.

Wskaźniki

Dla każdego typu można utworzyć wskaźnik, który odwołuje się do zmiennej. W ramach przypomnienia napisałem program, używający wskaźników:
C/C++
#include <iostream>
using namespace std;
int main()
{
    int liczba = 15;
    int * wskaznik =& liczba; //wskaźnik
    int ** wskazniknowy =& wskaznik; //wskaźnik do wskaźnika
    cout << liczba << " " <<* wskaznik << " " <<** wskazniknowy << endl;
    getchar();
}
Można oczywiście utworzyć wskaźnik do enum:
C/C++
#include <iostream>
using namespace std;
enum wlasny_enum
{
    przyklad0 = 0, //zamiast średników stosuje się przecinki
    przyklad1 = 1,
    przyklad2 = 2,
    //...
    przykladktorystam, //przy "wartości" ostatniej przecinka nie stosuje się. Nie trzeba podawać też wartości.
    przyklad
};
int suma_liczb_naszego_enuma()
{
    return wlasny_enum( przyklad0 ) + wlasny_enum( przyklad1 ) + wlasny_enum( przyklad2 ) + wlasny_enum
    ( przykladktorystam ) + wlasny_enum( przyklad ); //wykorzystujemy składniki enuma, bez inicjalizacji przykładowej zmiennej
}
int main()
{
    wlasny_enum nowy = przykladktorystam;
    wlasny_enum * wskaznik =& nowy;
    cout << suma_liczb_naszego_enuma() << " " << wlasny_enum( przyklad ) << " " <<* wskaznik /* Wskaźnik */ << endl; //strumien
    getchar();
}

Funkcje a enum

Tutaj nasze enum to jeden z argumentów, tak jak w przypadku tworzenia funkcji zwykłej. Oczywiście trzeba jako argument użyć naszego enuma, i nazwy nowej zmienej:
C/C++
#include <iostream>
using namespace std;
enum wlasny_enum
{
    przyklad0 = 0,
    przyklad1 = 1
};
wlasny_enum zmien( wlasny_enum argument )
{
    return argument;
}
wlasny_enum zmien1( wlasny_enum & argument )
{
    return argument;
}
int main()
{
    wlasny_enum przykladowy0 = zmien( przyklad1 );
    wlasny_enum przykladowy1 = zmien1( przykladowy0 );
    cout << przykladowy0 << " " << przykladowy1 << endl;
    getchar();
}
W przypadku pierwszej funkcji używamy argumentu, by nadać zmiennej wartość, zaś w drugim przypadku jest referencja, która odwoływać się będzie do jakiejś zmiennej.
Poprzedni dokument Następny dokument
Szablony klas Biblioteka <string>