Разлика између структуре и уније

Аутор: Laura McKinney
Датум Стварања: 1 Април 2021
Ажурирати Датум: 16 Може 2024
Anonim
Nike Pegasus VS Nike Structure
Видео: Nike Pegasus VS Nike Structure

Садржај


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

Разумејмо разлику између структуре и уније, заједно са упоредним табелом.

  1. Упоредни графикон
  2. Дефиниција
  3. Кључне разлике
  4. Сличности
  5. Закључак

Упоредни графикон

Основе поређењаСтруктураунија
ОсновниЗасебна меморијска локација додељена је сваком члану структуре.Сви чланови синдиката деле исту меморијску локацију.
Изјаваструцт струцт_наме {
типе елемент1;
тип елемент2;
.
.
} варијабла1, варијабла2, ...;
унион у_наме {
типе елемент1;
тип елемент2;
.
.
} варијабла1, варијабла2, ...;
кључна речструцтунија
ВеличинаВеличина структуре = збир величине свих чланова података.Величина Савеза = величина највећих чланова.
Сторе ВалуеПохрањује различите вредности за све чланове.Чува исту вредност за све чланове.
У времеСтруктура чува више вредности, различитих чланова, структуре.Синдикат чува јединствену вредност истовремено за све чланове.
Начин гледањаНаведите један начин за преглед сваке локације у меморији.Омогућите више начина за приказ исте локације у меморији.
Анонимна функцијаНема анонимне функције.Анонимна унија може бити проглашена.

Дефиниција структуре

Структура је збирка променљивих различитих типова података које називају заједничким именом. Променљиве структуре се називају „чланови“. Подразумевано су сви чланови структуре „јавни“. Када декларирате структуру, креирате предложак помоћу којег можете креирати објекте структуре, дијелећи исту организацију чланова података и функција чланова. Изјави структуре увијек претходи кључна реч „струцт“, која компајлеру каже да је декларирана структура. Узмимо пример.


Узмимо пример.

стручан запосленик {стринг наме; стринг цомпани_наме; стринг стринг; } емп1, емп2;

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

Име датој структури дефинише „тип“ (у горњем примеру назив структуре је „запослени“). Променљиве ове врсте могу се створити, као што је горе, створили смо две променљиве 'емп1' и 'емп2' типа "запослени". У горе наведеном примеру створили смо променљиву структуру одмах након декларације; наизменично, може се креирати одвојено.

структурни запосленик емп1, емп2; // структура кључне речи није обавезна.

Чланови структурне варијабле могу се иницијализирати или им се може приступити кориштењем оператора дот (.).

емп1.наме = "асхок";

Информације садржане у једној структурној варијабли могу се додијелити другој варијабли структуре исте врсте као што слиједи.


емп1.наме = "асхок"; емп1.цомпани_наме = "Тецкпик"; емп1.цити = "Делхи"; емп2 = емп1; // додељивање вредности члана емп1 на емп2. цоут <

Овдје смо додијелили променљиву структуру 'емп1' то 'емп2', па 'емп1' копира сву вриједност својих чланова у одговарајућег члана 'епм2'.

Члан променљиве структуре може се пренети у функцију.

фунцт (емп1.цити);

Цјеловита варијабла структуре може се пренијети у функцију, обје методе позива вриједности и позива референцом.

фунт (емп1); // функција позивања позивом методом вредности. . . воид фунцт (структ. запосленик емп) {// примање вриједности чланова емп1. цоут <

Овде се промена вредности члана променљиве структуре неће одражавати изван функције јер се променљива преноси позивом методом вредности. Сада направимо исту ствар позивом референтном методом.

фунт (& емп1); // функција позивања позивом референтном методом. . . воид фунцт (структурни запосленик * емп) {// пријемна адреса ем1. емп-> град = "Нур"; // промени вредност члана (града) променљиве структуре емп1. . }

Овде се структурна променљива преноси референцом, тако да се промена вредности члана структуре променљиве такође одражава и изван функције.

сртуцт запослени * емп; // уклањање поинтера структуре типа запосленог. емп = & емп1; // додељивање адресе емп1 показивачу. емп-> град // показивач који приступа граду члану емп1.

Показивач на структуру се такође може креирати; садржи адресу променљиве структуре.

У структури је иницијализација агрегата дозвољена када дефиниција структуре не садржи било који конструктор или виртуелне функције дефиниране од стране корисника или основну класу или приватно или заштићено поље.

инт маин () {струцт епм3 = {"Анил", "Тецкпик", "Нур"}; } // Могуће јер структура запосленог не садржи ниједну горе поменуту ствар.

Дефиниција уније

Синдикат је меморијска локација коју дели два или више различитих врста променљивих декларисаних под једним типом уније. Кључна реч која се користи за проглашавање синдиката је “унион”. У Ц ++, унија може садржати и функцију члана и променљиве. Подразумевано су сви чланови синдиката "јавни". Изјава о “синдикату” слична је декларацији структуре.

унион у_типе {инт к, цхар ц; флоат ф; } у1, у2;

Овде смо прогласили савез под именом у_типе. Чланови у_типе су 'к' целог броја, 'ц' карактера и 'ф' флоат типа. Такође смо створили синдикалне променљиве 'у1' и 'у2', типа 'у_типе', одмах након проглашења уније. Синдикалну променљиву такође можемо прогласити одвојено од декларације синдиката.

инт маин () {унион у_типе у1, у2; // Синдикат кључних речи није обавезан у Ц ++. }

Приступ члановима синдиката може се извршити употребом дот (.) Оператора, а претходи му варијабла уније и слиједи члан те варијабле.

у1.к = 10;

Као и структуре, збирна иницијализација није могућа у унији. Као што знамо, синдикат дели исту меморијску локацију за све своје чланове истовремено, само се једна варијабла иницијализира и сва варијабла се аутоматски ажурира са иницијализираном вредношћу.

у1.к = 10; цоут <

Ако покушате да промените вредност било ког члана „у1“. Други члан ће се аутоматски ажурирати на ту вредност.

у1.ц = 65; цоут <

Простор који је додељен синдикату једнак је величини највећег члана синдиката. Како је бајт додељен 'цхар' 1 бајту, 'инт' је 4 бајта, а 'флоат' је 4 бајта, тако је највећа величина 4 бајта. Дакле, меморија која је додељена 'у1' и 'у2' је 4 бајта.

инт маин () {инт сизе_1 = сизеоф (у1); // 4 инт сизе_2 = сизеоф (у2); // 4

Показивач на унију може се креирати баш као и по структури. Показивач садржи адресу синдиката.

унион у_типе * ун; ун = & у1; цоут <Икс; // 10

Као и структура, унија се такође може пренијети на функције обје методе, тј. Позив по вриједности и позив референцом.

фунцт (у1); // функција позивања позивом методом вредности. . . воид фунцт (удружење у_типе ун) {// примање вриједности члана у1. цоут <

А сада, дозволимо да се функција позива позивом референтном методом.

фунцт (& у1); // функција позивања позивом методом рефренце. . . воид фунцт (уније у_типе ун) {// примање адресе у1. ун-> к = 20. }

Постоји посебна врста уније у Ц ++ која се зове Анонимна унија “. Анонимни савез не може имати назив типа и не може се креирати варијабла таквог савеза. Само је рећи компајлеру да ће његове променљиве чланице делити исту локацију. Променљива анонимна унија може се упутити без уобичајеног оператора тачке (.).

инт маин () {унион {// дефинира анонимну унију с именом типа. инт к, цхар ц; флоат ф; }; к = 10; // референцирао је варијаблу уније с оут дот оператором цоут <

У анонимној унији није допуштена ниједна функција члана, не може садржавати приватне или заштићене податке, а глобална анонимна унија мора бити одређена као „статична“.

Точке које треба запамтити за уобичајену синдикалну декларацију.

  • Дефиниција уније може такође садржавати конструктор и деструктор.
  • Синдикат пружа више начина за приказ исте локације у меморији.
  • Синдикат не може наслиједити класу било које врсте.
  • Синдикат не може бити основна класа.
  • Синдикат не може имати функцију виртуалног члана.
  • Синдикат не може имати статичку променљиву.
  1. Структура користи различите меморијске локације за различите чланове. Дакле, различита вредност може се доделити свим члановима. Али, синдикат додељује исту меморијску локацију свим члановима. Дакле, једна се вриједност може додијелити свим члановима.
  2. Структура има различиту меморијску локацију за све чланове; према томе, може садржавати више вриједности одједном, а као што знамо, синдикат дијели исту меморијску локацију за све чланове, стога може похранити једну вриједност истовремено.
  3. Генерално, укупна величина структуре је већа од укупне величине савеза, јер величина структуре је збир величине свих чланова структуре, а величина синдиката је величина члана удружења највећи тип.
  4. Структура пружа јединствени приказ сваке локације док унија пружа више приказа једне локације.
  5. Можете прогласити анонимну унију, али не и анонимну структуру.

Сличности:

  • И структура и унија имају исти начин декларирања, стварања променљивих и исти начин приступа члановима променљивих.
  • И структура и унија могу се пребацити у функцију обје методе позива по вриједности и позива референцом.
  • И Структура и унија су тип података о контејнерима и садрже објект било којег типа података, укључујући другу структуру, унион, низ као њихових чланова.

Закључак:

Обје, структура и унија су тип података контејнера који садржи члана различитих типова. Али структуре се користе када морамо да похранимо различиту вредност за све чланове на различитом месту меморије. Синдикати се користе када је потребна конверзија типа.