C++ sąjungos pavyzdžiai

C Sajungos Pavyzdziai



Sąjunga yra specialus C++ klasės tipas, leidžiantis saugoti skirtingų tipų duomenis bendrosios atminties vietoje. Skirtingai nuo struktūrų, kur kiekviena dalis paprastai gauna savo atmintį, sąjungos leidžia skirtingiems duomenims naudoti tą pačią atminties vietą. Dėl šios savybės sąjungos ypač naudingos, kai atminties efektyvumas yra prioritetas ir vienu metu reikia pasiekti tik vieną iš narių. Šiame straipsnyje mes įsigilinsime į sąjungų sąvoką C++ ir išnagrinėsime kelis pavyzdžius, parodančius jų naudingumą įvairiuose scenarijuose.

Sintaksė:

Sąjunga yra vartotojo apibrėžtas tipas, leidžiantis saugoti įvairių tipų duomenis bendros atminties vietoje. Naudojant sąjungą, taikoma sintaksė, kuri yra identiška struktūrai.







Pagrindinė sintaksė yra tokia:



sąjunga Sąjungos pavadinimas {

// Narių deklaracijos

DataType1 narys1 ;

DataType2 narys2 ;

//...

} ;

Čia „UnionName“ yra sąjungos identifikatorius, suteikiantis unikalų pavadinimą, nurodantį šį konkretų vartotojo apibrėžtą tipą. Profsąjungos narių duomenų tipai žymimi kaip „DataType1“, „DataType2“ ir kt. Šie duomenų tipai reiškia įvairių tipų informaciją, kuri gali būti saugoma sąjungoje. Kiekvienas sąjungos narys, pavadintas tokiais vardais kaip „narys1“, „member2“ ir kt., reiškia atskirą duomenų dalį.



Dabar mes suprantame pagrindinę sintaksę. Dabar naudokime keletą atvejų, kad tai geriau suprastume.





1 pavyzdys: pagrindinis Sąjungos naudojimas

Pirmasis pavyzdys iliustruoja pagrindinį sąjungų naudojimą C++, parodydamas, kaip jie leidžia dalytis atminties vieta tarp skirtingų duomenų tipų vienoje struktūroje.

Štai pavyzdys:



#include

naudojant vardų sritį std ;

sąjunga ArrayUnion {

tarpt intArray [ 5 ] ;

plūdė floatArray [ 5 ] ;

} ;

tarpt pagrindinis ( ) {

ArrayUnion arrayUnion ;

dėl ( tarpt i = 0 ; i < 5 ; ++ i ) {

arrayUnion. intArray [ i ] = i * 2 ;

}

cout << 'Int Array': ;

dėl ( tarpt i = 0 ; i < 5 ; ++ i ) {

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

}

cout << endl ;

dėl ( tarpt i = 0 ; i < 5 ; ++ i ) {

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

}

cout << 'Float Array': ;

dėl ( tarpt i = 0 ; i < 5 ; ++ i ) {

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

}

cout << endl ;

grąžinti 0 ;

}

Šiame C++ kodo fragmente naudojame sąjungą, pavadintą „MyUnion“, kuri apima tris skirtingus duomenų elementus: sveikąjį skaičių (intValue), slankiojo kablelio skaičių (floatValue) ir simbolį (charValue). Tik vienas iš šių narių gali būti aktyvus tam tikru momentu dėl sąjungos galimybės dalytis atminties vieta.

„Pagrindinėje“ funkcijoje paskelbiame sąjungos egzempliorių, kuris yra „mano sąjunga“. Pirma, sveikojo skaičiaus nario vertę nustatome į 42 ir spausdindami naudojame „cout“. Vėliau nariui „floatValue“ priskiriame slankiojo kablelio reikšmę 3,14 ir išspausdiname. Galiausiai „charValue“ nariui priskiriame simbolį „A“ ir jį išspausdiname. Svarbu atsiminti, kad kadangi visi sąjungos nariai turi tą pačią atminties vietą, vieno nario pakeitimas gali turėti įtakos kitų narių vertybėms. Kodas baigiamas grąžinant 0, o tai reiškia sėkmingą vykdymą.

2 pavyzdys: Sąjunga su struktūra

Struktūra yra C++ duomenų tipas, kurį vartotojai gali sukurti norėdami sujungti įvairių tipų kintamuosius vienu vieningu pavadinimu. Sąjungos sujungimas su struktūra gali būti naudingas, kai norime sukurti duomenų struktūrą, kurioje gali būti įvairių tipų duomenys, o kiekvienas tipas yra susietas su konkrečiu lauku. Šis susiejimas leidžia kurti sudėtingas duomenų struktūras su įvairiais atvaizdais.

Štai pavyzdys, kaip naudoti sąjungą struktūroje C++:

#include

naudojant vardų sritį std ;

struktūra Taškas {

tarpt s1 ;

tarpt s2 ;

} ;

sąjunga Figūra {

tarpt pusės ;

plūdė spindulys ;

Taško centras ;

} ;

tarpt pagrindinis ( ) {

Formos forma ;

figūra. pusės = 5 ;
cout << 'Šonai:' << figūra. pusės << endl ;

figūra. spindulys = 6.0f ;
cout << 'Spindulys:' << figūra. spindulys << endl ;

figūra. centras = { 10 , dvidešimt } ;
cout << 'Centras: (' << figūra. centras . s1 << ', ' << figūra. centras . s2 << ')' << endl ;

grąžinti 0 ;

}

Šiame kode apibrėžiame C++ programą, kuri naudoja sąjungą ir struktūrą skirtingiems geometrinės formos aspektams pavaizduoti. Pirma, paskelbiame „taško“ struktūrą, kurią sudaro du sveikieji skaičiai, „s1“ ir „s2“, kurie atspindi taško koordinates 2D erdvėje. Tada apibrėžiame „sąjungą“, pavadintą „Shape“, kurią sudaro trys nariai: sveikasis skaičius „kraštinės“, „spindulys“ slankiojo kablelio ir „taško“ struktūros, pavadintos „centras“. Pereinant prie „pagrindinės“ funkcijos, mes sukuriame „Shape“ objektą, pavadintą „forma“. Tada mes parodome sąjungos universalumą, priskirdami vertybes skirtingiems jos nariams. Iš pradžių nustatome pusių skaičių iki 5 ir atspausdiname rezultatą. Toliau figūrai priskiriame 6,0 spindulį ir išvedame spindulį. Galiausiai figūrai priskiriame centro tašką su koordinatėmis (10, 20) ir atspausdiname centro koordinates.

3 pavyzdys: sąjunga su Enum

C++ kalboje išvardinimai, paprastai vadinami enums, yra skirti apibrėžti įvardytų integralinių konstantų rinkinį. Sąjungų derinimas su sąjungomis gali būti naudingas tais atvejais, kai norime pavaizduoti kintamąjį, kuris gali turėti skirtingus tipus, kurių kiekvienas yra susietas su konkrečia sąrašo reikšme.

Štai pavyzdys:

#include

naudojant vardų sritį std ;

enum Duomenų tipas {

SVEIKI SKAIČIUS ,

PLŪDĖ ,

CHAR

} ;

sąjunga DataValue {

tarpt intValue ;

plūdė floatValue ;

char charValue ;

} ;

struktūra Duomenys {

DataType tipas ;

DataValue vertė ;

} ;

tarpt pagrindinis ( )

{

Duomenų duomenys1 , duomenys2 , duomenys3 ;

duomenys1. tipo = SVEIKI SKAIČIUS ;
duomenys1. vertė . intValue = 42 ;

duomenys2. tipo = PLŪDĖ ;
duomenys2. vertė . floatValue = 3.14f ;

duomenys3. tipo = CHAR ;
duomenys3. vertė . charValue = 'A' ;

cout << „1 duomenys:“ << duomenys1. vertė . intValue << endl ;
cout << '2 duomenys:' << duomenys2. vertė . floatValue << endl ;
cout << '3 duomenys:' << duomenys3. vertė . charValue << endl ;

grąžinti 0 ;

}

Šiame pavyzdyje turime programą, kuri naudoja enumas, sąjungas ir struktūras, kad sukurtų lanksčią duomenų struktūrą, galinčią turėti įvairių tipų vertes. „DataType“ sąrašas apibrėžiamas taip, kad atspindėtų tris pagrindinius duomenų tipus: INTEGER, FLOAT ir CHAR. Enum pagerina kodo skaitomumą ir palaikymą, siūlydamas pavadintų integraliųjų konstantų rinkinį.

Tada sudarome sąjungą pavadinimu „DataValue“ su trimis nariais: „charValue“ tipo char, „floatValue“ tipo float ir „intValue“ tipo int. Su sąjunga šie nariai turi bendrą atminties vietą, kuri leidžia sąjungai pakaitomis pritaikyti skirtingų tipų vertes. Tada sukuriama „Data“ struktūra, kurią sudaro du nariai: „DataType“ skaitiklis, pavadintas „type“ ir „DataValue“ sąjunga, pavadinta „vertė“. Ši struktūra leidžia susieti duomenų tipą su atitinkama reikšme, suteikiant struktūrizuotą vaizdą.

„Pagrindinėje“ funkcijoje sukuriame tris „Data“ struktūros egzempliorius: „data1“, „data2“ ir „data3“. Šiems egzemplioriams priskiriame reikšmes nurodydami duomenų tipą ir nustatydami atitinkamą reikšmę sąjungoje. Pavyzdžiui, „data1“ priskiriamas INTEGER tipui, kurio reikšmė yra 42. Galiausiai, mes naudojame „cout“ teiginius, kad išspausdintume reikšmes, kurios yra saugomos kiekviename „Data“ egzemplioriuje. Programa išveda sveikąjį skaičių „data1“, slankiojo kablelio reikšmę „data2“ ir simbolio reikšmę „data3“.

Šis pavyzdys iliustruoja, kaip derinant enumus, sąjungas ir struktūras galima sukurti universalų ir tipo saugų duomenų atvaizdavimą C++.

Išvada

C++ sąjungos yra galingas ir lankstus mechanizmas, skirtas valdyti įvairius duomenų tipus vienoje atminties erdvėje. Šiame straipsnyje iliustruoti atvejai pabrėžia sąjungų prisitaikymą ir veiksmingumą sprendžiant įvairius scenarijus. Nuo pagrindinių naudojimo būdų, parodančių duomenų tipų pakeičiamumą iki sudėtingesnių programų, apimančių struktūras ir apibrėžimus, šie pavyzdžiai pabrėžia sąjungų C++ programavimo efektyvumą ir pritaikomumą.