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:
Rozmiar uni jest równy, rozmiarowi jej największego elementu.
Do elementów zawartych w uni dostajemy się za pomocą operatora wyłuskania (czyli "."), lub za pomocą wskaźników (i operatora this "→")
Jak już wcześniej wspomniałem w uni można przechowywać naraz wartość tylko jednej zmiennej co zobrazuje ten przykład:
Unie mogą zawierać również funkcje :
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 !
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 !
Kategoria: C/C++