Programowanie w języku C/C++

Union

Unia jest kolejnym obok struktury i klasy typem definiowanym przez użytkownika. Od pozostałych dwóch różni ją jednak to ze swoje składniki zapisuje w tym samym (współdzielonym) obszarze pamięci.

Co to oznacza w praktyce ?
Tylko tyle ze w danej chwili, unia może przechowywać wartość JEDNEJ z swoich zmiennych składowych.

Unie definiujemy w następujący sposób:
 
union PrzykladowaUnia 
{
int i_zmienna_skladowa;
char c_zmienna_skladowa;
};


Rozmiar uni jest równy, rozmiarowi jej największego elementu.

cout << "unia = " << sizeof(PrzykladowaUnia); // Powinno zwrócić 4 (zależnie od kompilatora)


Do elementów zawartych w uni dostajemy się za pomocą operatora wyłuskania (czyli "."), lub za pomocą wskaźników (i operatora this "->")

PrzykladowaUnia obiekt_uni;
PrzykladowaUnia *wskaznik_na_unie;
wskaznik_na_unie = &obiekt_uni;
obiekt_uni.i_zmienna_skladowa = 5; // nadanie wartości 5 zmiennej
wskaznik_na_unie->i_zmienna_skladowa = 6 // nadanie tej samej zmiennej wartość 6


Jak już wcześniej wspomniałem w uni można przechowywać naraz wartość tylko jednej zmiennej co zobrazuje ten przykład:

PrzykladowaUnia obiekt_uni;
obiekt_uni.i_zmienna_skladowa = 5; // nadanie wartości 5 zmiennej
obiekt_uni.c_zmienna_skladowa = 'a'; // nadpisanie zawartości naszej uni znakiem "a";
 
cout << obiekt_uni.i_zmienna_skladowa; // taki zapis nie jest poprawny !! Unia przechowuje teraz znak "a" wiec nie możemy odnieść sie do obiektu typu int
cout << obiekt_uni.c_zmienna_skladowa; // teraz wszystko w porządku. Na ekran zostanie wypisana litera "a"


Unie mogą zawierać również funkcje :

union Unia_z_funkcja{
int liczba;
char znak;
 
void wypisz_liczbe(){
cout << liczba;
}
 
};


Dostęp do zmiennych w uni, możemy określać za pomocą operatorów private i public.
Ponieważ Uni nie można dziedziczyć Operator protected jest niedopuszczalny !