Primeri C++ Union

Primeri C Union



Unija je posebna vrsta razreda v C++, ki omogoča shranjevanje različnih tipov podatkov na skupno pomnilniško lokacijo. Za razliko od struktur, kjer vsak del običajno dobi svoj pomnilnik, unije omogočajo, da različni deli podatkov uporabljajo isto pomnilniško lokacijo. Zaradi te lastnosti so zveze še posebej uporabne, kadar je učinkovitost pomnilnika prednostna naloga in je treba hkrati dostopati samo do enega od članov. V tem članku se bomo poglobili v koncept zvez v C++ in raziskali več primerov, ki prikazujejo njihovo uporabnost v različnih scenarijih.

Sintaksa:

Unija je tip, ki ga določi uporabnik in omogoča shranjevanje različnih podatkovnih tipov znotraj skupne pomnilniške lokacije. Uporaba unije sledi sintaksi, ki je enaka strukturi.







Osnovna sintaksa je naslednja:



zveza UnionName {

// Izjave članov

DataType1 member1 ;

DataType2 member2 ;

//...

} ;

Tukaj 'UnionName' služi kot identifikator za zvezo, ki zagotavlja edinstveno ime za sklicevanje na to določeno uporabniško določeno vrsto. Podatkovni tipi članov unije so označeni kot 'DataType1', 'DataType2' in tako naprej. Ti tipi podatkov označujejo različne vrste informacij, ki jih je mogoče shraniti znotraj unije. Vsak član znotraj zveze, označen z imeni, kot so »član1«, »član2« itd., predstavlja poseben del podatkov.



Zdaj razumemo osnovno sintakso. Uporabimo nekaj primerov, da to bolje razumemo.





Primer 1: Osnovna uporaba unije

Prvi primer ponazarja osnovno uporabo unij v C++ in prikazuje, kako omogočajo delitev pomnilniškega prostora med različnimi tipi podatkov znotraj ene strukture.

Tukaj je primer:



#include

uporaba imenskega prostora std ;

zveza ArrayUnion {

int intArray [ 5 ] ;

lebdi floatArray [ 5 ] ;

} ;

int glavni ( ) {

ArrayUnion arrayUnion ;

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

arrayUnion. intArray [ jaz ] = jaz * 2 ;

}

cout << 'Int Array:' ;

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

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

}

cout << konec ;

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

arrayUnion. floatArray [ jaz ] = jaz * 1,5f ;

}

cout << 'Plavajoča matrika:' ;

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

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

}

cout << konec ;

vrnitev 0 ;

}

V tem izrezku kode C++ uporabljamo zvezo z imenom »MyUnion«, ki vključuje tri različne podatkovne člane: celo število (intValue), število s plavajočo vejico (floatValue) in znak (charValue). Samo eden od teh članov je lahko aktiven na kateri koli točki zaradi zmožnosti zveze, da deli pomnilniški prostor.

Znotraj funkcije »main« deklariramo primerek unije, ki je »myUnion«. Najprej nastavimo vrednost celega člana na 42 in uporabimo »cout«, da jo natisnemo. Nato dodelimo vrednost s plavajočo vejico 3,14 članu 'floatValue' in jo natisnemo. Na koncu dodelimo znak 'A' članu 'charValue' in ga natisnemo. Pomembno si je zapomniti, da ker si vsi člani sindikata delijo isto pomnilniško lokacijo, lahko sprememba enega člana vpliva na vrednote drugih članov. Koda se zaključi z vrnitvijo 0, kar pomeni uspešno izvedbo.

Primer 2: Zveza s Struct

Struktura je vrsta podatkov v C++, ki jo lahko uporabniki ustvarijo za združevanje spremenljivk različnih vrst pod enim enotnim imenom. Kombinacija unije s strukturo je lahko uporabna, ko želimo ustvariti podatkovno strukturo, ki lahko vsebuje različne vrste podatkov, vsak tip pa je povezan z določenim poljem. To združevanje omogoča razvoj kompleksnih podatkovnih struktur z različnimi predstavitvami.

Tukaj je primer uporabe unije znotraj strukture v C++:

#include

uporaba imenskega prostora std ;

struct Točka {

int s1 ;

int s2 ;

} ;

zveza oblika {

int straneh ;

lebdi polmer ;

Središče točke ;

} ;

int glavni ( ) {

Oblika oblike ;

oblika. straneh = 5 ;
cout << 'Strani:' << oblika. straneh << konec ;

oblika. polmer = 6.0f ;
cout << 'Radij:' << oblika. polmer << konec ;

oblika. center = { 10 , dvajset } ;
cout << 'Center: (' << oblika. center . s1 << ', ' << oblika. center . s2 << ')' << konec ;

vrnitev 0 ;

}

V tej kodi definiramo program C++, ki uporablja unijo in strukturo za predstavitev različnih vidikov geometrijske oblike. Najprej deklariramo strukturo 'Point', ki je sestavljena iz dveh celoštevilskih členov, 's1' in 's2', ki predstavljata koordinate točke v 2D prostoru. Nato definiramo »unijo« z imenom »Oblika«, ki je sestavljena iz treh členov: celega števila »strani«, plavajoče vejice »polmera« in strukture »Točka« z imenom »center«. Če se premaknemo na 'glavno' funkcijo, instanciramo objekt 'Shape' z imenom 'shape'. Nato pokažemo vsestranskost unije tako, da različnim članom pripišemo vrednote. Na začetku nastavimo število strani na 5 in natisnemo rezultat. Nato obliki dodelimo polmer 6,0 in izpišemo polmer. Na koncu obliki dodelimo središčno točko s koordinatami (10, 20) in natisnemo koordinate središča.

Primer 3: Zveza z Enum

V C++ so enumeracije, običajno imenovane enum, namenjene definiranju zbirke imenovanih integralnih konstant. Združevanje enumov z zvezami je lahko uporabno v scenarijih, kjer želimo predstaviti spremenljivko, ki lahko prevzame različne vrste, od katerih je vsaka povezana z določeno vrednostjo enum.

Tukaj je primer:

#include

uporaba imenskega prostora std ;

enum DataType {

CELO ŠTEVILO ,

PLAVANJE ,

CHAR

} ;

zveza DataValue {

int intValue ;

lebdi floatValue ;

char charValue ;

} ;

struct podatki {

Vrsta DataType ;

Vrednost DataValue ;

} ;

int glavni ( )

{

Podatkovni podatki1 , podatki2 , podatki3 ;

podatki1. vrsta = CELO ŠTEVILO ;
podatki1. vrednost . intValue = 42 ;

podatki2. vrsta = PLAVANJE ;
podatki2. vrednost . floatValue = 3.14f ;

podatki3. vrsta = CHAR ;
podatki3. vrednost . charValue = 'A' ;

cout << 'Podatek 1:' << podatki1. vrednost . intValue << konec ;
cout << 'Podatek 2:' << podatki2. vrednost . floatValue << konec ;
cout << 'Podatek 3:' << podatki3. vrednost . charValue << konec ;

vrnitev 0 ;

}

Za ta primer imamo program, ki uporablja enume, unije in strukture za ustvarjanje prilagodljive podatkovne strukture, ki lahko hrani različne vrste vrednosti. Enum »DataType« je definiran tako, da predstavlja tri temeljne tipe podatkov: INTEGER, FLOAT in CHAR. Enum izboljša berljivost in vzdržljivost kode s ponudbo nabora imenovanih integralnih konstant.

Nato naredimo unijo z imenom »DataValue« s tremi člani: »charValue« tipa char, »floatValue« tipa float in »intValue« tipa int. Z zvezo si ti člani delijo skupno pomnilniško lokacijo, ki omogoča, da zveza izmenično sprejme vrednosti različnih vrst. Nato se ustvari struktura »Data«, ki je sestavljena iz dveh članov: enumeratorja »DataType« z imenom »type« in unije »DataValue« z imenom »value«. Ta struktura nam omogoča, da podatkovni tip povežemo z njegovo ustrezno vrednostjo in tako zagotovimo strukturirano predstavitev.

V funkciji »main« ustvarimo tri primerke strukture »Data«: »data1«, »data2« in »data3«. Tem primerkom dodelimo vrednosti tako, da določimo vrsto podatkov in nastavimo ustrezno vrednost znotraj unije. Na primer, »data1« je dodeljen tipu INTEGER z vrednostjo 42. Končno uporabimo stavke »cout« za tiskanje vrednosti, ki so shranjene v vsakem primerku »Data«. Program izpiše celoštevilsko vrednost 'data1', vrednost s plavajočo vejico 'data2' in vrednost znaka 'data3'.

Ta primer ponazarja, kako je mogoče z združevanjem enumov, unij in struktur ustvariti vsestransko in tipsko varno predstavitev podatkov v C++.

Zaključek

Zveze C++ zagotavljajo zmogljiv in prilagodljiv mehanizem za upravljanje različnih tipov podatkov v enem pomnilniškem prostoru. Primeri, ki so prikazani v tem članku, poudarjajo prilagodljivost in učinkovitost sindikatov pri obravnavanju različnih scenarijev. Od temeljnih uporab, ki prikazujejo medsebojno zamenljivost tipov podatkov, do bolj zapletenih aplikacij, ki vključujejo strukture in enume, ti primeri poudarjajo učinkovitost in prilagodljivost, ki ju unije prinašajo programiranju C++.