Pagkakaiba sa pagitan ng Istraktura at Unyon

May -Akda: Laura McKinney
Petsa Ng Paglikha: 1 Abril 2021
I -Update Ang Petsa: 15 Mayo 2024
Anonim
Ang Tamang Pagpili ng Dumalagang Baboy Para Gawing Inahin
Video.: Ang Tamang Pagpili ng Dumalagang Baboy Para Gawing Inahin

Nilalaman


Pinapayagan ng C ++ ang lahat ng limang mga paraan na ibinigay ng wika C upang lumikha ng isang pasadyang data. Ang limang paraan na ito ay 'istraktura', 'bit-field', 'unyon', 'enumeration', 'typedef'. Sa artikulo sa ibaba ay pag-aralan natin ang pagkakaiba sa pagitan ng istraktura at unyon. Ang istruktura at unyon ay pareho ay ang mga uri ng data ng lalagyan na maaaring humawak ng data ng anumang "uri". Ang isang pangunahing pagkakaiba na nagpapakilala sa istraktura at unyon ay ang istraktura ay may hiwalay na lokasyon ng memorya para sa bawat miyembro nito samantalang, ang mga miyembro ng isang unyon ay nagbabahagi ng parehong lokasyon ng memorya.

Unawain ang pagkakaiba sa pagitan ng istraktura at unyon, kasama ang isang tsart ng paghahambing.

  1. Tsart ng paghahambing
  2. Kahulugan
  3. Pangunahing Pagkakaiba
  4. Pagkakatulad
  5. Konklusyon

Tsart ng paghahambing

Batayan ng PaghahambingIstrakturaUnyon
PangunahingAng hiwalay na lokasyon ng memorya ay inilaan sa bawat miyembro ng istraktura.Ang lahat ng mga miyembro ng unyon ay nagbabahagi ng parehong lokasyon ng memorya.
Deklarasyonbalangkas na istruktura
type element1;
type element2;
.
.
} variable1, variable2, ...;
unyname ng unyon {
type element1;
type element2;
.
.
} variable1, variable2, ...;
keywordistrukturaunyon
LakiSukat ng Istraktura = kabuuan ng laki ng lahat ng mga miyembro ng data.Sukat ng Union = laki ng pinakamalaking mga miyembro.
Halaga ng TindahanTindahan ang mga natatanging halaga para sa lahat ng mga miyembro.Nagtitinda ng parehong halaga para sa lahat ng mga miyembro.
Sa Isang OrasAng isang istraktura ay nag-iimbak ng maraming mga halaga, ng iba't ibang mga miyembro, ng istraktura.Ang isang unyon ay nag-iimbak ng isang solong halaga sa isang oras para sa lahat ng mga miyembro.
Paraan ng PagtanawMagbigay ng isang solong paraan upang matingnan ang bawat lokasyon ng memorya.Magbigay ng maraming paraan upang matingnan ang parehong lokasyon ng memorya.
Anonymous na tampokWalang tampok na Anonymous.Ang isang hindi kilalang unyon ay maaaring ipahayag.

Kahulugan ng Istraktura

Ang istraktura ay isang koleksyon ng mga variable ng iba't ibang mga uri ng data, na tinutukoy ng isang karaniwang pangalan. Ang mga variable sa isang istraktura ay tinatawag na "mga miyembro". Bilang default, ang lahat ng mga miyembro ng isang istraktura ay "pampubliko". Kapag nagpahayag ka ng isang istraktura, lumikha ka ng isang template, na maaaring magamit upang lumikha ng mga bagay na istraktura, pagbabahagi ng parehong samahan ng mga miyembro ng data at mga function ng miyembro. Ang pagpapahayag ng istraktura ay palaging nauna sa keyword na "istraktura", na nagsasabi sa tagatala na ang isang istraktura ay idineklara. Kumuha tayo ng isang halimbawa.


Kumuha tayo ng isang halimbawa.

istraktura ng empleyado {string name; string company_name; string ng lungsod; } emp1, emp2;

Dito, nagpapahayag kami ng isang istraktura para sa pag-iimbak ng impormasyon ng mga empleyado. Ang deklarasyon ay natapos ng isang semicolon, dahil ang pagpapahayag ng istraktura ay isang pahayag at, sa C ++ ang pahayag ay tinapos ng isang semicolon.

Ang pangalang ibinigay sa isang istraktura ay tumutukoy sa isang "uri" (sa itaas halimbawa ang pangalan ng istraktura ay "empleyado"). Ang mga variable ng mga uri na ito ay maaaring nilikha, tulad ng sa itaas, gumawa kami ng dalawang variable 'emp1 ′ at' emp2 ′ ng uri ng "empleyado". Sa halimbawa sa itaas, lumikha kami ng isang 'istraktura' variable pagkatapos lamang ng deklarasyon; Bilang kahalili, maaari itong nilikha nang hiwalay.

istraktura ng empleado ng emp1, emp2; // ang keyword na istraktura ay hindi sapilitan.

Ang mga miyembro ng isang variable na istraktura ay maaaring ma-initialize o maaaring ma-access sa pamamagitan ng paggamit ng tuldok (.) Operator.


emp1.name = "ashok";

Ang impormasyon na nilalaman sa isang variable na istraktura ay maaaring italaga sa isa pang variable na istraktura ng parehong uri tulad ng sundin.

emp1.name = "ashok"; emp1.company_name = "Teckpix"; emp1.city = "Delhi"; emp2 = emp1; // nagtatalaga ng mga halaga ng miyembro ng emp1 hanggang emp2. cout <

Dito, itinalaga namin ang variable na istraktura 'emp1 ′ sa' emp2 ′,, kinopya ng 'emp1 ′ ang lahat ng halaga ng mga miyembro nito sa kaukulang miyembro ng' epm2 '.

Ang miyembro ng variable na istraktura ay maaaring maipasa sa pagpapaandar.

funct (emp1.city);

Ang buong variable na istraktura ay maaaring maipasa sa pag-andar, sa pamamagitan ng parehong mga pamamaraan na tawag sa pamamagitan ng halaga at tawag sa pamamagitan ng sanggunian.

funt (emp1); // function ng pagtawag sa pamamagitan ng tawag sa pamamagitan ng paraan ng halaga. . . walang bisa na gawain (istraktura ng empleyo ng empleyo) {// pagtanggap ng mga halaga ng mga miyembro ng emp1. cout <

Dito, ang pagbabago sa halaga ng isang miyembro ng variable ng istraktura ay hindi sumasalamin sa labas ng pag-andar bilang isang variable ay ipinasa sa pamamagitan ng tawag sa pamamagitan ng halaga ng halaga. Ngayon gawin natin ang parehong bagay sa pamamagitan ng pagtawag sa pamamagitan ng sanggunian na pamamaraan.

funt (& emp1); // function ng pagtawag sa pamamagitan ng tawag sa pamamagitan ng paraan ng sanggunian. . . walang bisa na gawain (istraktura ng empleyado * emp) {// natanggap na address ng emp1. emp-> city = "Nur"; // palitan ang halaga ng miyembro (lungsod) ng variable variable na emp1. . }

Dito, ang variable na istraktura ay ipinasa sa pamamagitan ng sanggunian, ang pagbabago sa halaga ng mga miyembro ng variable ng istraktura ay sumasalamin din sa labas ng function din.

empleyado ng srtuct * emp; // decalring ang istraktura pointer ng uri ng empleyado. emp = & emp1; // itinalaga ang address ng emp1 sa pointer. emp-> city // pointer na nag-access sa member city of emp1.

Ang pointer sa istraktura ay maaari ring malikha; hinahawakan nito ang address ng variable variable.

Sa istraktura ay pinapayagan ang pagsisimula ng pinagsama-samang kapag ang kahulugan ng istraktura ay hindi naglalaman ng, ang sinumang gumagamit na tinukoy ng tagabuo o virtual na pag-andar o batayang pang-base o pribado o protektado na larangan.

int pangunahing () {istruktura epm3 = {"Anil", "Teckpix", "Nur"}; } / Posibleng bilang istraktura ng empleyado ay hindi naglalaman ng anuman sa itaas na mga bagay.

Kahulugan ng Union

Ang unyon ay isang lokasyon ng memorya na ibinahagi ng dalawa o higit pang magkakaibang uri ng variable na idineklara sa ilalim ng isang uri ng unyon. Ang keyword na ginamit upang magpahayag ng isang unyon ay "unyon". Sa C ++, ang isang unyon ay maaaring maglaman ng parehong pag-andar ng mga miyembro at variable. Bilang default, lahat ng mga kasapi ng unyon ay "pampubliko". Ang pagpapahayag ng "unyon" ay katulad ng pagpapahayag ng istraktura.

unyon ng unyon {int x, char c; lumutang f; } u1, u2;

Dito, ipinahayag namin ang isang unyon na nagngangalang u_type. Ang mga miyembro ng u_type ay 'x' ng uri ng integer, 'c' ng uri ng character at 'f' ng uri ng float. Nilikha din namin ang mga variable ng unyon na 'u1' at 'u2', ng uri ng 'u_type', pagkatapos ng pagpapahayag ng isang unyon. Maaari rin nating ideklara ang pagkakaiba-iba ng unyon nang hiwalay sa pagpapahayag ng isang unyon.

int main () {unyon u_type u1, u2; // Ang unyon ng keyword ay hindi sapilitan sa C ++. }

Ang pag-access ng mga miyembro ng unyon ay maaaring gawin sa pamamagitan ng paggamit ng tuldok (.) Operator, na pinauna ng variable ng unyon at sinundan ang miyembro ng variable na iyon.

u1.x = 10;

Tulad ng mga istruktura, ang pagsisimula ng pinagsama-samang ay hindi posible sa isang unyon. Tulad ng nalalaman namin ang unyon ay nagbabahagi ng parehong lokasyon ng memorya para sa lahat ng mga miyembro nito sa isang oras lamang ang isang variable na nauna at ang lahat ng variable ay awtomatikong na-update sa paunang halaga.

u1.x = 10; cout <

Kung susubukan mong baguhin ang halaga ng sinumang miyembro ng 'u1'. Ang ibang miyembro ay awtomatikong mai-update sa halagang iyon.

u1.c = 65; cout <

Ang puwang na inilaan sa unyon ay katumbas ng laki ng pinakamalaking miyembro ng unyon. Bilang ang inte na inilalaan sa 'char' ay 1 bait, ang 'int' ay 4 bait at ang 'float' ay 4 bait kaya, ang pinakamalaking sukat ay 4 na bait. Kaya, ang memorya na inilaan sa 'u1' at 'u2' ay 4 bait.

int main () {int size_1 = sizeof (u1); // 4 int size_2 = sizeof (u2); // 4

Ang pointer sa unyon ay maaaring malikha tulad ng sa istraktura. Hawak ng pointer ang address ng unyon.

unyon unyon * un; un = & u1; cout <x; // 10

Tulad ng istraktura, ang unyon ay maaari ring maipasa sa mga pag-andar ng pareho ng mga pamamaraan i.e. tawag sa pamamagitan ng halaga at tawag sa pamamagitan ng sanggunian.

functiont (u1); // function ng pagtawag sa pamamagitan ng tawag sa pamamagitan ng paraan ng halaga. . . walang bisa na gawain (unyon u_type un) {// natatanggap ang halaga ng miyembro ng u1. cout <

Ngayon, tawagan ang function gamit ang tawag sa pamamagitan ng paraan ng sanggunian.

katus (& u1); // function ng pagtawag sa pamamagitan ng tawag sa pamamagitan ng paraan ng pagwawasto. . . walang bisa na gawain (unyon u_type un) {// natanggap ang address ng u1. un-> x = 20. }

Mayroong isang espesyal na uri ng unyon sa C ++ na tinatawag na Anonymous Union ”. Ang hindi nagpapakilalang unyon ay hindi maaaring magkaroon ng pangalan ng uri at, walang variable ng naturang unyon na maaaring malikha. Ito ay upang sabihin lamang sa tagatala na ang mga variable ng miyembro nito ay magbahagi ng parehong lokasyon. Ang variable ng isang hindi nagpapakilalang unyon ay maaaring i-refer nang walang normal na tuldok (.) Operator.

int main () {unyon {// tukuyin ang hindi nagpapakilalang unyon kasama ang pangalan ng uri. int x, char c; lumutang f; }; x = 10; // refered ang unyon variable sa labas ng dot operator cout <

Sa hindi nagpapakilalang unyon walang pinapayagan ang pagpapaandar ng miyembro, hindi ito maaaring maglaman ng pribado o protektado na data, at ang pandaigdigang hindi nagpapakilalang unyon ay dapat na tinukoy bilang 'static'.

Ang mga puntos na dapat tandaan para sa normal na deklarasyon ng unyon.

  • Ang kahulugan ng isang unyon ay maaari ring maglaman ng tagabuo at mapanirang.
  • Nagbibigay ang unyon ng maraming mga paraan upang matingnan ang parehong lokasyon ng memorya.
  • Ang unyon ay hindi maaaring magmana sa klase ng anumang uri.
  • Ang unyon ay hindi maaaring maging isang klase ng base.
  • Ang unyon ay hindi maaaring magkaroon ng virtual member function.
  • Ang unyon ay hindi maaaring magkaroon ng isang static variable.
  1. Gumagamit ang Istraktura ng iba't ibang lokasyon ng memorya para sa iba't ibang mga miyembro. Samakatuwid, ang natatanging halaga ay maaaring magamit sa lahat ng mga miyembro. Ngunit, ang unyon ay nagbibigay ng parehong lokasyon ng memorya sa lahat ng mga miyembro. Samakatuwid, ang isang solong halaga ay maaaring magamit sa lahat ng mga miyembro.
  2. Ang istraktura ay may iba't ibang lokasyon ng memorya para sa lahat ng mga miyembro; samakatuwid, maaari itong maglaman ng maraming mga halaga sa isang pagkakataon, at dahil alam namin ang unyon ay nagbabahagi ng parehong lokasyon ng memorya para sa lahat ng mga miyembro samakatuwid, maaari itong mag-imbak ng isang solong halaga sa isang pagkakataon.
  3. Kadalasan, ang kabuuang sukat ng istraktura ay mas malaki kaysa sa kabuuang sukat ng unyon sapagkat ang sukat ng isang istraktura ay ang kabuuan ng sukat ng lahat ng mga kasapi ng mga istruktura at ang laki ng unyon ay ang laki ng miyembro ng pinakamalaking uri.
  4. Nagbibigay ang istraktura ng solong pagtingin ng bawat lokasyon samantalang, ang unyon ay nagbibigay ng maraming mga view ng isang solong lokasyon.
  5. Maaari kang magpahayag ng isang hindi nagpapakilalang unyon ngunit hindi isang hindi nagpapakilalang istraktura.

Pagkakatulad:

  • Ang parehong istraktura at unyon ay may parehong paraan ng pagdedeklara ng sarili, ang paglikha ng mga variable at ang parehong paraan ng pag-access sa mga miyembro ng mga variable.
  • Parehong Istraktura at unyon ay maaaring maipasa sa isang pag-andar sa pamamagitan ng parehong mga pamamaraan na tawag sa pamamagitan ng halaga at tawag sa pamamagitan ng sanggunian.
  • Parehong Istraktura at unyon ay isang uri ng data ng lalagyan at naglalaman ng isang bagay ng anumang uri ng data, kabilang ang iba pang istraktura, unyon, array bilang kanilang mga miyembro.

Konklusyon:

Parehong, istraktura at unyon ay ang datatype ng lalagyan na naglalaman ng miyembro ng iba't ibang uri. Ngunit ang mga istraktura ay ginagamit kapag kailangan nating mag-imbak ng natatanging halaga para sa lahat ng mga miyembro sa isang natatanging lokasyon ng memorya. Ginagamit ang mga unyon kapag kinakailangan ang pag-convert ng uri.