Składnia:
Unia to typ definiowany przez użytkownika, umożliwiający przechowywanie różnych typów danych w jednym miejscu pamięci współdzielonej. Użycie unii ma składnię identyczną ze strukturą.
Podstawowa składnia jest następująca:
unia Nazwa Unii {
// Deklaracje członków
Element DataType11 ;
Element DataType22 ;
//...
} ;
Tutaj „UnionName” służy jako identyfikator unii, który zapewnia unikalną nazwę odwołującą się do tego konkretnego typu zdefiniowanego przez użytkownika. Typy danych członków związku są oznaczone jako „DataType1”, „DataType2” i tak dalej. Te typy danych oznaczają różne rodzaje informacji, które mogą być przechowywane w ramach związku. Każdy członek związku, oznaczony nazwami takimi jak „członek1”, „członek2” itp., reprezentuje odrębną część danych.
Teraz rozumiemy podstawową składnię. Użyjmy teraz kilku przykładów, aby lepiej to zrozumieć.
Przykład 1: Podstawowe użycie związku
Pierwszy przykład ilustruje podstawowe wykorzystanie unii w C++, pokazując, w jaki sposób umożliwiają one współdzielenie przestrzeni pamięci pomiędzy różnymi typami danych w ramach jednej struktury.
Oto przykład:
#include
używając przestrzeni nazw std ;
unia ArrayUnion {
wew intArray [ 5 ] ;
platforma tablica pływakowa [ 5 ] ;
} ;
wew główny ( ) {
ArrayUnion ArrayUnion ;
Do ( wew I = 0 ; I < 5 ; ++ I ) {
tablicaUnia. intArray [ I ] = I * 2 ;
}
cout << „Tablica wewnętrzna:” ;
Do ( wew I = 0 ; I < 5 ; ++ I ) {
cout << ' ' << tablicaUnia. intArray [ I ] ;
}
cout << koniec ;
Do ( wew I = 0 ; I < 5 ; ++ I ) {
tablicaUnia. tablica pływakowa [ I ] = I * 1,5 f ;
}
cout << „Tablica pływająca:” ;
Do ( wew I = 0 ; I < 5 ; ++ I ) {
cout << ' ' << tablicaUnia. tablica pływakowa [ I ] ;
}
cout << koniec ;
powrót 0 ;
}
W tym fragmencie kodu C++ używamy unii o nazwie „MyUnion”, która zawiera trzy różne elementy danych: liczbę całkowitą (intValue), liczbę zmiennoprzecinkową (floatValue) i znak (charValue). Tylko jeden z tych członków może być aktywny w danym momencie ze względu na zdolność związku do współdzielenia przestrzeni pamięci.
W ramach funkcji „main” deklarujemy instancję unii, którą jest „myUnion”. Najpierw ustawiamy wartość elementu całkowitego na 42 i używamy „cout”, aby ją wydrukować. Następnie przypisujemy wartość zmiennoprzecinkową 3,14 do elementu „floatValue” i drukujemy ją. Na koniec przypisujemy znak „A” do elementu „charValue” i drukujemy go. Należy pamiętać, że ponieważ wszyscy członkowie związku mają to samo miejsce w pamięci, zmiana jednego członka może mieć wpływ na wartości pozostałych członków. Kod kończy się zwróceniem 0, co oznacza pomyślne wykonanie.
Przykład 2: Unia z Struct
Struktura to typ danych w C++, który użytkownicy mogą tworzyć w celu łączenia zmiennych różnych typów pod jedną ujednoliconą nazwą. Połączenie unii ze strukturą może być przydatne, gdy chcemy utworzyć strukturę danych, która może przechowywać różne typy danych, a każdy typ jest powiązany z określonym polem. To połączenie pozwala na tworzenie złożonych struktur danych charakteryzujących się różnorodną reprezentacją.
Oto przykład użycia unii w strukturze w C++:
#includeużywając przestrzeni nazw std ;
struktura Punkt {
wew s1 ;
wew s2 ;
} ;
unia Kształt {
wew boki ;
platforma promień ;
Środek punktu ;
} ;
wew główny ( ) {
Kształt kształtu ;
kształt. boki = 5 ;
cout << 'Boki: ' << kształt. boki << koniec ;
kształt. promień = 6.0f ;
cout << „Promień:” << kształt. promień << koniec ;
kształt. Centrum = { 10 , 20 } ;
cout << 'Centrum: (' << kształt. Centrum . s1 << „”, „ << kształt. Centrum . s2 << „)” << koniec ;
powrót 0 ;
}
W tym kodzie definiujemy program w C++, który używa unii i struktury do reprezentowania różnych aspektów kształtu geometrycznego. Najpierw deklarujemy strukturę „Point”, która składa się z dwóch elementów całkowitych, „s1” i „s2”, które reprezentują współrzędne punktu w przestrzeni 2D. Następnie definiujemy „unię” o nazwie „Kształt”, która składa się z trzech elementów: liczby całkowitej „boków”, zmiennoprzecinkowej „promień” i struktury „Point” o nazwie „centrum”. Przechodząc do funkcji „main”, tworzymy obiekt „Shape” o nazwie „shape”. Następnie demonstrujemy wszechstronność związku, przypisując wartości różnym jego członkom. Początkowo ustawiamy liczbę boków na 5 i drukujemy wynik. Następnie przypisujemy kształtowi promień 6,0 i wyprowadzamy promień. Na koniec przypisujemy kształtowi punkt środkowy o współrzędnych (10, 20) i drukujemy współrzędne środka.
Przykład 3: Unia z Enum
W C++ wyliczenia, powszechnie nazywane wyliczeniami, służą do definiowania kolekcji nazwanych stałych całkowitych. Łączenie wyliczeń z związkami może być przydatne w scenariuszach, w których chcemy reprezentować zmienną, która może przyjmować różne typy, każdy powiązany z określoną wartością wyliczenia.
Oto przykład:
#includeużywając przestrzeni nazw std ;
wyliczenie Typ danych {
LICZBA CAŁKOWITA ,
PLATFORMA ,
ZWĘGLAĆ
} ;
unia Wartość danych {
wew intWartość ;
platforma wartość pływająca ;
zwęglać wartość char ;
} ;
struktura Dane {
Typ danych ;
WartośćDanych ;
} ;
wew główny ( )
{
Dane danych1 , dane2 , dane3 ;
dane1. typ = LICZBA CAŁKOWITA ;
dane1. wartość . intWartość = 42 ;
dane2. typ = PLATFORMA ;
dane2. wartość . wartość pływająca = 3.14f ;
dane3. typ = ZWĘGLAĆ ;
dane3. wartość . wartość char = 'A' ;
cout << „Dane 1:” << dane1. wartość . intWartość << koniec ;
cout << „Dane 2:” << dane2. wartość . wartość pływająca << koniec ;
cout << „Dane 3:” << dane3. wartość . wartość char << koniec ;
powrót 0 ;
}
W tym przykładzie mamy program, który wykorzystuje wyliczenia, unie i struktury do tworzenia elastycznej struktury danych, która może przechowywać różne typy wartości. Wyliczenie „DataType” definiuje się tak, aby reprezentowało trzy podstawowe typy danych: INTEGER, FLOAT i CHAR. Wyliczenie zwiększa czytelność kodu i łatwość konserwacji, oferując zestaw nazwanych stałych całkowitych.
Następnie tworzymy unię o nazwie „DataValue” z trzema elementami: „charValue” typu char, „floatValue” typu float i „intValue” typu int. W przypadku unii elementy te mają wspólną lokalizację w pamięci, która umożliwia unii wymienne przyjmowanie wartości różnych typów. Następnie tworzona jest struktura „Data”, która składa się z dwóch elementów: modułu wyliczającego „DataType” o nazwie „type” i unii „DataValue” o nazwie „value”. Ta struktura pozwala nam powiązać typ danych z odpowiadającą mu wartością, zapewniając uporządkowaną reprezentację.
W funkcji „main” tworzymy trzy instancje struktury „Data”: „dane1”, „dane2” i „dane3”. Przypisujemy wartości tym instancjom, określając typ danych i ustawiając odpowiednią wartość w ramach unii. Na przykład „data1” ma przypisany typ INTEGER o wartości 42. Na koniec używamy instrukcji „cout”, aby wydrukować wartości przechowywane w każdej instancji „Data”. Program wyprowadza wartość całkowitą „data1”, wartość zmiennoprzecinkową „data2” i wartość znakową „data3”.
Ten przykład ilustruje, jak można zastosować łączenie wyliczeń, unii i struktur w celu utworzenia wszechstronnej i bezpiecznej dla typu reprezentacji danych w języku C++.
Wniosek
Unie C++ zapewniają potężny i elastyczny mechanizm zarządzania różnorodnymi typami danych w jednym obszarze pamięci. Przypadki zilustrowane w tym artykule podkreślają zdolność adaptacji i skuteczność związków zawodowych w rozwiązywaniu szeregu scenariuszy. Od podstawowych zastosowań demonstrujących wymienność typów danych po bardziej złożone aplikacje obejmujące struktury i wyliczenia — przykłady te podkreślają wydajność i możliwości adaptacji, jakie unie wnoszą do programowania w C++.