Примери Ц++ уније

Primeri C Unije



Унија је посебан тип класе у Ц++ који омогућава складиштење различитих типова података на заједничкој меморијској локацији. За разлику од структура, где сваки део обично добија своју меморију, синдикати дозвољавају различитим деловима података да користе исту меморијску локацију. Ова карактеристика чини синдикате посебно корисним када је ефикасност меморије приоритет, а истовремено треба приступити само једном од чланова. У овом чланку ћемо се позабавити концептом синдиката у Ц++-у и истражити више примера који показују њихову корисност у различитим сценаријима.

Синтакса:

Унија је тип који дефинише корисник, омогућавајући складиштење различитих типова података у оквиру заједничке меморијске локације. Коришћење уније прати синтаксу која је идентична структури.







Основна синтакса је следећа:



унија УнионНаме {

// Декларације чланова

ДатаТипе1 мембер1 ;

ДатаТипе2 мембер2 ;

//...

} ;

Овде „УнионНаме“ служи као идентификатор за унију који обезбеђује јединствено име за референцу на овај специфични кориснички дефинисани тип. Типови података чланова синдиката су означени као „ДатаТипе1“, „ДатаТипе2“ и тако даље. Ови типови података означавају различите типове информација које се могу чувати унутар синдиката. Сваки члан у синдикату, означен називима као што су „члан1”, „члан2” итд., представља посебан податак.



Сада разумемо основну синтаксу. Хајде сада да искористимо неколико примера да бисмо ово боље разумели.





Пример 1: Основна употреба уније

Први пример илуструје основну употребу унија у Ц++, показујући како оне омогућавају дељење меморијског простора између различитих типова података унутар једне структуре.

Ево примера:



#инцлуде <иостреам>

користећи простор имена стд ;

унија АрраиУнион {

инт интАрраи [ 5 ] ;

пловак флоатАрраи [ 5 ] ;

} ;

инт главни ( ) {

АрраиУнион арраиУнион ;

за ( инт и = 0 ; и < 5 ; ++ и ) {

арраиУнион. интАрраи [ и ] = и * 2 ;

}

цоут << „Инт низ:“ ;

за ( инт и = 0 ; и < 5 ; ++ и ) {

цоут << ' ' << арраиУнион. интАрраи [ и ] ;

}

цоут << ендл ;

за ( инт и = 0 ; и < 5 ; ++ и ) {

арраиУнион. флоатАрраи [ и ] = и * 1.5ф ;

}

цоут << „Плутајући низ:“ ;

за ( инт и = 0 ; и < 5 ; ++ и ) {

цоут << ' ' << арраиУнион. флоатАрраи [ и ] ;

}

цоут << ендл ;

повратак 0 ;

}

У овом Ц++ исечку кода користимо унију под називом „МиУнион“ која укључује три различита члана података: цео број (интВалуе), број са помичним зарезом (флоатВалуе) и знак (цхарВалуе). Само један од ових чланова може бити активан у било ком тренутку због способности синдиката да дели меморијски простор.

У оквиру функције „маин“, ми декларишемо инстанцу уније која је „миУнион“. Прво, постављамо вредност целобројног члана на 42 и користимо „цоут“ да је одштампамо. Након тога, додељујемо вредност са помичним зарезом 3.14 члану „флоатВалуе“ и штампамо је. На крају, додељујемо знак „А“ члану „цхарВалуе“ и штампамо га. Неопходно је запамтити да пошто сви чланови синдиката деле исту меморијску локацију, промена једног члана може утицати на вредности других чланова. Код се завршава враћањем 0 што означава успешно извршење.

Пример 2: Унија са структуром

Структура је тип података у Ц++-у који корисници могу креирати да комбинују променљиве различитих типова под једним јединственим именом. Комбиновање уније са структуром може бити корисно када желимо да креирамо структуру података која може да садржи различите типове података, а сваки тип је повезан са одређеним пољем. Ово упаривање омогућава развој сложених структура података које садрже различите репрезентације.

Ево примера коришћења уније унутар структуре у Ц++:

#инцлуде <иостреам>

користећи простор имена стд ;

струцт Тачка {

инт с1 ;

инт с2 ;

} ;

унија Облик {

инт стране ;

пловак радијус ;

Тачка центар ;

} ;

инт главни ( ) {

Облик облика ;

облик. стране = 5 ;
цоут << 'Стране:' << облик. стране << ендл ;

облик. радијус = 6.0ф ;
цоут << 'Радијус: ' << облик. радијус << ендл ;

облик. центар = { 10 , двадесет } ;
цоут << 'Центар: (' << облик. центар . с1 << ', ' << облик. центар . с2 << ')' << ендл ;

повратак 0 ;

}

У овом коду дефинишемо Ц++ програм који користи унију и структуру за представљање различитих аспеката геометријског облика. Прво, декларишемо структуру „Тачка“ која се састоји од два целобројна члана, „с1“ и „с2“, који представљају координате тачке у 2Д простору. Затим дефинишемо „унију“ под називом „Облик“ која се састоји од три члана: целог броја „стране“, помичног зареза „радијуса“ и структуре „Поинт“ под називом „центар“. Прелазећи на „главну“ функцију, инстанцирамо објекат „Схапе“ под називом „облик“. Затим демонстрирамо свестраност синдиката додељивањем вредности његовим различитим члановима. У почетку смо поставили број страна на 5 и одштампали резултат. Затим додељујемо радијус од 6.0 облику и исписујемо радијус. Коначно, додељујемо централну тачку са координатама (10, 20) облику и штампамо координате центра.

Пример 3: Унија са Енумом

У Ц++, енумерације, које се обично називају набрајања, служе за дефинисање колекције именованих интегралних константи. Комбиновање енума са унијама може бити корисно у сценаријима где желимо да представимо променљиву која може да поприми различите типове, од којих је сваки повезан са одређеном вредношћу набрајања.

Ево примера:

#инцлуде <иостреам>

користећи простор имена стд ;

енум Тип података {

ИНТЕГЕР ,

ПЛОВАК ,

ЦХАР

} ;

унија ДатаВалуе {

инт интВалуе ;

пловак флоатВалуе ;

цхар цхарВалуе ;

} ;

струцт Подаци {

Тип типа података ;

Вредност ДатаВалуе ;

} ;

инт главни ( )

{

Подаци о подацима1 , дата2 , дата3 ;

подаци1. тип = ИНТЕГЕР ;
подаци1. вредност . интВалуе = 42 ;

дата2. тип = ПЛОВАК ;
дата2. вредност . флоатВалуе = 3.14ф ;

дата3. тип = ЦХАР ;
дата3. вредност . цхарВалуе = 'А' ;

цоут << 'Подаци 1: ' << подаци1. вредност . интВалуе << ендл ;
цоут << 'Подаци 2: ' << дата2. вредност . флоатВалуе << ендл ;
цоут << 'Подаци 3: ' << дата3. вредност . цхарВалуе << ендл ;

повратак 0 ;

}

За овај пример, имамо програм који користи енуме, уније и структуре за креирање флексибилне структуре података која је способна да држи различите типове вредности. Енум „ДатаТипе“ је дефинисан да представља три основна типа података: ИНТЕГЕР, ФЛОАТ и ЦХАР. Енум побољшава читљивост кода и могућност одржавања нудећи скуп именованих интегралних константи.

Затим правимо унију под називом „ДатаВалуе“ са три члана: „цхарВалуе“ типа цхар, „флоатВалуе“ типа флоат и „интВалуе“ типа инт. Са синдикатом, ови чланови деле заједничку меморијску локацију која омогућава синдикату да наизменично прилагоди вредности различитих типова. Затим се креира структура „Дата“ која се састоји од два члана: пописивача „ДатаТипе“ под називом „типе“ и „ДатаВалуе“ уније под називом „валуе“. Ова структура нам омогућава да повежемо тип података са његовом одговарајућом вредношћу, обезбеђујући структурирану репрезентацију.

У „главној“ функцији инстанцирамо три инстанце структуре „Подаци“: „подаци1“, „подаци2“ и „подаци3“. Додељујемо вредности овим инстанцама тако што ћемо навести тип података и поставити одговарајућу вредност унутар уније. На пример, „дата1“ се додељује са типом ИНТЕГЕР са вредношћу од 42. Коначно, користимо наредбе „цоут“ за штампање вредности које су ускладиштене у свакој инстанци „Подаци“. Програм емитује целобројну вредност „подаци1“, вредност „подаци2“ у покретном зарезу и вредност знака „подаци3“.

Овај пример илуструје како се комбиновање енума, унија и структура може користити за креирање разноврсног и типова безбедног представљања података у Ц++.

Закључак

Ц++ синдикати пружају моћан и флексибилан механизам за управљање различитим типовима података унутар једног меморијског простора. Примери који су илустровани у овом чланку истичу прилагодљивост и делотворност синдиката у решавању низа сценарија. Од основних употреба које демонстрирају заменљивост типова података до сложенијих апликација које укључују структуре и енуме, ови примери наглашавају ефикасност и прилагодљивост коју синдикати уносе у Ц++ програмирање.