Primjeri C++ unije

Primjeri C Unije



Unija je poseban tip klase u C++ koji omogućuje pohranjivanje različitih tipova podataka na zajedničkoj memorijskoj lokaciji. Za razliku od struktura, gdje svaki dio obično dobiva svoju memoriju, unije dopuštaju različitim dijelovima podataka da koriste istu memorijsku lokaciju. Ova karakteristika čini sindikate osobito korisnim kada je učinkovitost memorije prioritet, a samo jednom od članova treba pristupiti odjednom. U ovom ćemo članku istražiti koncept unija u C++ i istražiti više primjera koji pokazuju njihovu korisnost u različitim scenarijima.

Sintaksa:

Unija je vrsta koju definira korisnik, koja omogućuje pohranjivanje različitih vrsta podataka unutar zajedničke memorijske lokacije. Korištenje unije slijedi sintaksu koja je identična strukturi.







Osnovna sintaksa je sljedeća:



unija UnionName {

// Izjave članova

DataType1 member1 ;

DataType2 member2 ;

//...

} ;

Ovdje 'UnionName' služi kao identifikator za uniju koja pruža jedinstveno ime za referencu na ovaj specifični korisnički definirani tip. Tipovi podataka članova unije označeni su kao 'DataType1', 'DataType2' i tako dalje. Ove vrste podataka označavaju različite vrste informacija koje se mogu pohraniti unutar unije. Svaki član unutar unije, označen imenima kao što su 'član1', 'član2', itd., predstavlja poseban podatak.



Sada razumijemo osnovnu sintaksu. Iskoristimo sada nekoliko primjera da ovo bolje razumijemo.





Primjer 1: Osnovna uporaba unije

Prvi primjer ilustrira osnovnu upotrebu unija u C++, prikazujući kako one omogućuju dijeljenje memorijskog prostora među različitim tipovima podataka unutar jedne strukture.

Evo primjera:



#include

koristeći prostor imena std ;

unija ArrayUnion {

int intArray [ 5 ] ;

plutati floatArray [ 5 ] ;

} ;

int glavni ( ) {

ArrayUnion arrayUnion ;

za ( int ja = 0 ; ja < 5 ; ++ ja ) {

arrayUnion. intArray [ ja ] = ja * 2 ;

}

cout << 'Int niz:' ;

za ( int ja = 0 ; ja < 5 ; ++ ja ) {

cout << ' ' << arrayUnion. intArray [ ja ] ;

}

cout << endl ;

za ( int ja = 0 ; ja < 5 ; ++ ja ) {

arrayUnion. floatArray [ ja ] = ja * 1.5f ;

}

cout << 'Float Array:' ;

za ( int ja = 0 ; ja < 5 ; ++ ja ) {

cout << ' ' << arrayUnion. floatArray [ ja ] ;

}

cout << endl ;

povratak 0 ;

}

U ovom C++ isječku koda koristimo uniju pod nazivom 'MyUnion' koja uključuje tri različita člana podataka: cijeli broj (intValue), broj s pomičnim zarezom (floatValue) i znak (charValue). Samo jedan od ovih članova može biti aktivan u bilo kojem trenutku zbog sposobnosti unije da dijeli memorijski prostor.

Unutar funkcije “main” deklariramo instancu unije koja je “myUnion”. Prvo postavljamo vrijednost člana cijelog broja na 42 i koristimo 'cout' za ispis. Nakon toga, dodjeljujemo vrijednost pomičnog zareza od 3,14 članu 'floatValue' i ispisujemo je. Na kraju, dodjeljujemo znak “A” članu “charValue” i ispisujemo ga. Važno je upamtiti da budući da svi članovi sindikata dijele istu memorijsku lokaciju, promjena jednog člana može utjecati na vrijednosti drugih članova. Kod završava vraćanjem 0 što označava uspješno izvršenje.

Primjer 2: Unija sa strukturom

Struktura je vrsta podataka u C++-u koju korisnici mogu stvoriti za kombiniranje varijabli različitih tipova pod jednim jedinstvenim imenom. Kombinacija unije sa strukturom može biti korisna kada želimo stvoriti podatkovnu strukturu koja može sadržavati različite vrste podataka, a svaka je vrsta povezana s određenim poljem. Ovo uparivanje omogućuje razvoj složenih struktura podataka s različitim prikazima.

Evo primjera korištenja unije unutar strukture u C++:

#include

koristeći prostor imena std ;

strukturirati Točka {

int s1 ;

int s2 ;

} ;

unija Oblik {

int strane ;

plutati radius ;

Središte točke ;

} ;

int glavni ( ) {

Oblik oblika ;

oblik. strane = 5 ;
cout << 'Strane: ' << oblik. strane << endl ;

oblik. radius = 6.0f ;
cout << 'Radijus: ' << oblik. radius << endl ;

oblik. centar = { 10 , dvadeset } ;
cout << 'Centar: (' << oblik. centar . s1 << ', ' << oblik. centar . s2 << ')' << endl ;

povratak 0 ;

}

U ovom kodu definiramo C++ program koji koristi uniju i strukturu za predstavljanje različitih aspekata geometrijskog oblika. Prvo, deklariramo strukturu “Point” koja se sastoji od dva cjelobrojna člana, “s1” i “s2”, koji predstavljaju koordinate točke u 2D prostoru. Zatim definiramo 'uniju' pod nazivom 'Oblik' koja se sastoji od tri člana: cijeli broj 'strane', pokretni zarez 'radijus' i struktura 'Točka' pod nazivom 'centar'. Prelazeći na 'glavnu' funkciju, instanciramo objekt 'Oblik' pod nazivom 'oblik'. Zatim demonstriramo svestranost sindikata dodjeljivanjem vrijednosti njegovim različitim članovima. U početku postavljamo broj strana na 5 i ispisujemo rezultat. Zatim dodijelimo polumjer od 6,0 ​​obliku i ispišemo polumjer. Na kraju, obliku dodjeljujemo središnju točku s koordinatama (10, 20) i ispisujemo koordinate središta.

Primjer 3: Unija s Enumom

U C++, enumeracije, koje se obično nazivaju enumima, služe u svrhu definiranja zbirke imenovanih integralnih konstanti. Kombiniranje enuma s unijama može biti korisno u scenarijima u kojima želimo predstaviti varijablu koja može poprimiti različite tipove, od kojih je svaki povezan s određenom enum vrijednošću.

Evo primjera:

#include

koristeći prostor imena std ;

nabrajanje Tip podataka {

CIJELI BROJ ,

PLUTATI ,

CHAR

} ;

unija DataValue {

int intValue ;

plutati floatValue ;

char charValue ;

} ;

strukturirati Podaci {

DataType vrsta ;

DataValue vrijednost ;

} ;

int glavni ( )

{

Podaci o podacima1 , podaci2 , podaci3 ;

podaci1. tip = CIJELI BROJ ;
podaci1. vrijednost . intValue = 42 ;

podaci2. tip = PLUTATI ;
podaci2. vrijednost . floatValue = 3.14f ;

podaci3. tip = CHAR ;
podaci3. vrijednost . charValue = 'A' ;

cout << 'Podatak 1: ' << podaci1. vrijednost . intValue << endl ;
cout << 'Podatak 2: ' << podaci2. vrijednost . floatValue << endl ;
cout << 'Podatak 3: ' << podaci3. vrijednost . charValue << endl ;

povratak 0 ;

}

Za ovaj primjer imamo program koji koristi enume, unije i strukture za stvaranje fleksibilne strukture podataka koja može držati različite vrste vrijednosti. Enum 'DataType' definiran je tako da predstavlja tri temeljna tipa podataka: INTEGER, FLOAT i CHAR. Enum poboljšava čitljivost koda i mogućnost održavanja nudeći skup imenovanih integralnih konstanti.

Zatim napravimo uniju pod nazivom 'DataValue' s tri člana: 'charValue' tipa char, 'floatValue' tipa float i 'intValue' tipa int. S unijom, ti članovi dijele zajedničku memorijsku lokaciju koja omogućuje uniji da naizmjenično prihvaća vrijednosti različitih tipova. Zatim se kreira struktura “Data” koja se sastoji od dva člana: enumerator “DataType” pod nazivom “type” i unija “DataValue” pod nazivom “value”. Ova nam struktura omogućuje povezivanje tipa podataka s odgovarajućom vrijednošću, pružajući strukturirani prikaz.

U funkciji “main” instanciramo tri instance strukture “Data”: “data1”, “data2” i “data3”. Ovim instancama dodjeljujemo vrijednosti navođenjem vrste podataka i postavljanjem odgovarajuće vrijednosti unutar unije. Na primjer, “data1” je dodijeljen tipu INTEGER s vrijednošću 42. Na kraju, koristimo se izjavama “cout” za ispis vrijednosti koje su pohranjene u svakoj instanci “Data”. Program ispisuje cjelobrojnu vrijednost 'podataka1', vrijednost pomičnog zareza 'podataka2' i znakovnu vrijednost 'podataka3'.

Ovaj primjer ilustrira kako se kombiniranje enuma, unija i struktura može upotrijebiti za stvaranje svestranog i sigurnog prikaza podataka u C++.

Zaključak

C++ unije pružaju snažan i fleksibilan mehanizam za upravljanje različitim tipovima podataka unutar jednog memorijskog prostora. Primjeri koji su ilustrirani u ovom članku naglašavaju prilagodljivost i učinkovitost sindikata u rješavanju niza scenarija. Od temeljnih upotreba koje demonstriraju zamjenjivost tipova podataka do složenijih aplikacija koje uključuju strukture i enume, ovi primjeri naglašavaju učinkovitost i prilagodljivost koju unije donose programiranju C++.