C++ Union példák

C Union Peldak



Az unió egy speciális osztálytípus a C++ nyelvben, amely lehetővé teszi különböző adattípusok tárolását egy megosztott memóriahelyen. A struktúrákkal ellentétben, ahol általában minden rész megkapja a memóriáját, az uniók lehetővé teszik, hogy a különböző adatrészek ugyanazt a memóriahelyet használják. Ez a tulajdonság különösen hasznossá teszi az uniókat, ha a memória hatékonysága prioritás, és egyszerre csak az egyik taghoz kell hozzáférni. Ebben a cikkben megvizsgáljuk a szakszervezetek C++ fogalmát, és számos olyan példát vizsgálunk meg, amelyek bemutatják azok hasznosságát különböző forgatókönyvekben.

Szintaxis:

Az unió a felhasználó által meghatározott típus, amely lehetővé teszi különféle adattípusok tárolását egy megosztott memóriahelyen belül. Az unió használata a struktúrával azonos szintaxist követ.







Az alapvető szintaxis a következő:



unió UnionName {

// Tagnyilatkozatok

DataType1 tag1 ;

DataType2 tag2 ;

//...

} ;

Itt az „UnionName” a szakszervezet azonosítójaként szolgál, amely egyedi névvel hivatkozik erre a felhasználó által meghatározott típusra. A szakszervezeti tagok adattípusait „DataType1”, „DataType2” és így tovább jelöli. Ezek az adattípusok az unión belül tárolható különféle típusú információkat jelölik. A szakszervezeten belüli minden egyes tag, amelyet olyan névvel jelölnek meg, mint „tag1”, „tag2” stb., egy külön adatot képvisel.



Most már megértjük az alapvető szintaxist. Használjunk most néhány példát ennek jobb megértéséhez.





1. példa: Alapvető uniós használat

Az első példa az uniók alapvető felhasználását mutatja be C++ nyelven, bemutatva, hogyan teszik lehetővé a memóriaterület megosztását a különböző adattípusok között egyetlen struktúrán belül.

Íme egy példa:



#include

névtér std használatával ;

unió ArrayUnion {

int intArray [ 5 ] ;

úszó floatArray [ 5 ] ;

} ;

int fő- ( ) {

ArrayUnion arrayUnion ;

számára ( int én = 0 ; én < 5 ; ++ én ) {

arrayUnion. intArray [ én ] = én * 2 ;

}

cout << 'Int Array:' ;

számára ( int én = 0 ; én < 5 ; ++ én ) {

cout << ' ' << arrayUnion. intArray [ én ] ;

}

cout << endl ;

számára ( int én = 0 ; én < 5 ; ++ én ) {

arrayUnion. floatArray [ én ] = én * 1.5f ;

}

cout << 'Float Array:' ;

számára ( int én = 0 ; én < 5 ; ++ én ) {

cout << ' ' << arrayUnion. floatArray [ én ] ;

}

cout << endl ;

Visszatérés 0 ;

}

Ebben a C++ kódrészletben a „MyUnion” nevű uniót használjuk, amely három különböző adattagot foglal magában: egy egész számot (intValue), egy lebegőpontos számot (floatValue) és egy karaktert (charValue). E tagok közül csak egy lehet aktív egy adott ponton, mivel a szakszervezet képes megosztani egy memóriaterületet.

A „fő” funkción belül deklaráljuk az unió egy példányát, amely a „myUnion”. Először az egész tag értékét 42-re állítjuk, és a „cout” használatával nyomtatjuk ki. Ezt követően a 3,14-es lebegőpontos értéket hozzárendeljük a „floatValue” taghoz, és kinyomtatjuk. Végül hozzárendeljük az „A” karaktert a „charValue” taghoz, és kinyomtatjuk. Fontos megjegyezni, hogy mivel minden szakszervezeti tag ugyanazon a memóriahelyen osztozik, az egyik tag megváltoztatása hatással lehet a többi tag értékeire. A kód a 0 visszaadásával zárul, ami sikeres végrehajtást jelent.

2. példa: Unió a struktúrával

A struktúra egy olyan adattípus a C++ nyelvben, amelyet a felhasználók létrehozhatnak, hogy a különböző típusú változókat egyetlen név alatt egyesítsék. Az unió struktúrával való kombinálása akkor lehet hasznos, ha olyan adatstruktúrát akarunk létrehozni, amely különböző típusú adatokat tartalmazhat, és minden típus egy adott mezőhöz van társítva. Ez a párosítás lehetővé teszi összetett adatstruktúrák fejlesztését, amelyek változatos reprezentációkat tartalmaznak.

Íme egy példa egy unió használatára egy struktúrán belül C++ nyelven:

#include

névtér std használatával ;

struct Pont {

int s1 ;

int s2 ;

} ;

unió Alak {

int oldalain ;

úszó sugár ;

Pont középpontja ;

} ;

int fő- ( ) {

Alakforma ;

alak. oldalain = 5 ;
cout << 'Oldal:' << alak. oldalain << endl ;

alak. sugár = 6.0f ;
cout << 'Sugár:' << alak. sugár << endl ;

alak. központ = { 10 , húsz } ;
cout << 'Közép: (' << alak. központ . s1 << ', ' << alak. központ . s2 << ')' << endl ;

Visszatérés 0 ;

}

Ebben a kódban egy C++ programot definiálunk, amely egy uniót és egy struktúrát használ a geometriai alakzat különböző aspektusainak ábrázolására. Először deklarálunk egy „Point” struktúrát, amely két egész tagból, „s1”-ből és „s2”-ből áll, amelyek egy 2D-s térben lévő pont koordinátáit reprezentálják. Ezután definiálunk egy „alakzat” nevű „egyesítést”, amely három tagból áll: egy „oldalak” egész számból, egy „sugár” lebegőpontos és egy „pont” struktúrából, melynek neve „középpont”. Továbblépve a „fő” függvényre, példányosítunk egy „Shape” objektumot, melynek neve „shape”. Ezután bemutatjuk a szakszervezet sokoldalúságát azzal, hogy értékeket rendelünk a különböző tagokhoz. Kezdetben az oldalak számát 5-re állítjuk, és kinyomtatjuk az eredményt. Ezután 6,0 sugarat rendelünk az alakzathoz, és kiadjuk a sugarat. Végül hozzárendelünk egy középpontot koordinátákkal (10, 20) az alakzathoz, és kinyomtatjuk a középpont koordinátáit.

3. példa: Egyesülés az Enum

A C++ nyelvben a felsorolások, amelyeket általában enumoknak neveznek, a megnevezett integrálkonstansok gyűjteményének meghatározását szolgálják. Az enum-ok uniókkal való kombinálása hasznos lehet olyan forgatókönyvekben, ahol egy olyan változót szeretnénk ábrázolni, amely különböző típusokat vehet fel, és mindegyikhez egy adott enum-érték tartozik.

Íme egy példa:

#include

névtér std használatával ;

enum Adattípus {

EGÉSZ SZÁM ,

ÚSZÓ ,

CHAR

} ;

unió DataValue {

int intValue ;

úszó floatValue ;

char charValue ;

} ;

struct Adat {

DataType típus ;

DataValue érték ;

} ;

int fő- ( )

{

Adatadatok1 , adatok2 , adatok3 ;

adatok1. típus = EGÉSZ SZÁM ;
adatok1. érték . intValue = 42 ;

adatok2. típus = ÚSZÓ ;
adatok2. érték . floatValue = 3.14f ;

adatok3. típus = CHAR ;
adatok3. érték . charValue = 'A' ;

cout << '1. adat:' << adatok1. érték . intValue << endl ;
cout << '2. adat:' << adatok2. érték . floatValue << endl ;
cout << '3. adat:' << adatok3. érték . charValue << endl ;

Visszatérés 0 ;

}

Ebben a példában van egy programunk, amely enumokat, uniókat és struktúrákat használ, hogy rugalmas adatstruktúrát hozzon létre, amely különböző típusú értékek tárolására képes. A „DataType” enum három alapvető adattípust képvisel: INTEGER, FLOAT és CHAR. Az enum javítja a kód olvashatóságát és karbantarthatóságát azáltal, hogy elnevezett integrált állandók készletét kínálja.

Ezután létrehozunk egy „DataValue” nevű uniót három taggal: „charValue” típusú char, „floatValue” típusú float és „intValue” típusú int. Az unióban ezek a tagok közös memóriahelyet használnak, amely lehetővé teszi az unió számára, hogy felcserélhetően befogadja a különböző típusok értékeit. Ezután létrejön a „Data” struktúra, amely két tagból áll: egy „típus” nevű „DataType” felsorolóból és egy „érték” nevű „DataValue” unióból. Ez a struktúra lehetővé teszi, hogy egy adattípust társítsunk a megfelelő értékkel, strukturált reprezentációt biztosítva.

A „fő” függvényben a „Data” struktúra három példányát készítjük el: „data1”, „data2” és „data3”. Az értékeket ezekhez a példányokhoz úgy rendeljük hozzá, hogy megadjuk az adattípust és beállítjuk a megfelelő értéket az unión belül. Például a „data1” egy INTEGER típushoz van rendelve, amelynek értéke 42. Végül a „cout” utasításokat használjuk az egyes „Data” példányokban tárolt értékek kinyomtatására. A program a „data1” egész értékét, a „data2” lebegőpontos értékét és a „data3” karakterértékét adja ki.

Ez a példa azt szemlélteti, hogy az enumok, uniók és struktúrák kombinálásával hogyan lehet sokoldalú és típusbiztos adatábrázolást létrehozni C++ nyelven.

Következtetés

A C++ uniók hatékony és rugalmas mechanizmust biztosítanak a különféle adattípusok egyetlen memóriaterületen belüli kezelésére. Az ebben a cikkben bemutatott esetek kiemelik a szakszervezetek alkalmazkodóképességét és hatékonyságát számos forgatókönyv megoldásában. Az adattípusok felcserélhetőségét demonstráló alapvető felhasználási módoktól a struktúrákat és enumokat magában foglaló összetettebb alkalmazásokig ezek a példák hangsúlyozzák a szakszervezetek hatékonyságát és alkalmazkodóképességét a C++ programozásban.