Razlika između strukture i unije

Autor: Laura McKinney
Datum Stvaranja: 1 Travanj 2021
Datum Ažuriranja: 15 Svibanj 2024
Anonim
Razlika između EACH, EVERY, ALL, MOST na engleskom jeziku
Video: Razlika između EACH, EVERY, ALL, MOST na engleskom jeziku

Sadržaj


C ++ omogućuje svih pet načina na koje je C jezik osigurao stvaranje prilagođenih podataka. Tih pet načina su "struktura", "bit polje", "unija", "nabrajanje", "typedef". U donjem ćemo članku istražiti razliku između strukture i unije. Obje strukture i unija su tipovi podataka u spremnicima koji mogu sadržavati podatke bilo kojeg "tipa". Glavna razlika koja razlikuje strukturu i zajednicu je ta što struktura ima zasebno memorijsko mjesto za svakog svog člana dok članovi udruge imaju isto mjesto u memoriji.

Razumijemo razliku između strukture i unije, zajedno sa usporednim grafikonom.

  1. Usporedni grafikon
  2. definicija
  3. Ključne razlike
  4. sličnosti
  5. Zaključak

Usporedni grafikon

Osnove usporedbeStrukturaUnija
Osnovni, temeljniZasebno memorijsko mjesto dodijeljeno je svakom članu strukture.Svi članovi sindikata dijele isto mjesto u memoriji.
Deklaracijastruct struct_name {
element tipa1;
tip elementa2;
.
.
} varijabla1, varijabla2, ...;
unije u_name {
element tipa1;
tip elementa2;
.
.
} varijabla1, varijabla2, ...;
ključna riječstructunija
VeličinaVeličina strukture = zbroj veličine svih članova podataka.Veličina Saveza = veličina najvećih članova.
Trgovinska vrijednostPohranjuje različite vrijednosti za sve članove.Pohranjuje istu vrijednost za sve članove.
Na vrijemeStruktura pohranjuje više vrijednosti, različitih članova, strukture.Sindikat pohranjuje jedinstvenu vrijednost istovremeno za sve članove.
Način gledanjaNavedite jedan način za prikaz svake memorijske lokacije.Pružite više načina za prikaz iste memorijske lokacije.
Anonimna značajkaNema anonimna značajka.Može se proglasiti anonimna unija.

Definicija strukture

Struktura je zbirka varijabli različitih vrsta podataka koje se nazivaju zajedničkim nazivom. Varijable u strukturi nazivaju se "members". Prema zadanim postavkama svi su članovi strukture "javni". Kad deklarirate strukturu, stvorite predložak pomoću kojeg možete kreirati objekte strukture, dijeleći istu organizaciju podataka i funkcija članova. Izjavi strukture uvijek prethodi ključna riječ „struct“, koja prevoditelju govori da je deklarirana struktura. Uzmimo primjer.


Uzmimo primjer.

zaposlenik strukture {naziv niza; string company_name; gudački grad; } Emp1, emp2;

Ovdje izjavljujemo strukturu za pohranu podataka zaposlenika. Deklaracija se završava točkom sa zarezom, kao što je deklaracija strukture izjava, a u C ++ izraz se prekida zarezom.

Naziv strukture daje "vrsti" (u gornjem primjeru naziv strukture je "zaposlenik"). Varijable ove vrste mogu se stvoriti, kao što je gore, stvorili smo dvije varijable 'emp1' i 'emp2' tipa "zaposlenik". U gornjem primjeru stvorili smo varijablu 'struktura' neposredno nakon deklaracije; naizmjence, mogla bi se kreirati zasebno.

strukturni zaposlenik emp1, emp2; // struktura ključne riječi nije obavezna.

Članovi strukturne varijable mogu se inicijalizirati ili im se može pristupiti pomoću operatora dot (.).

emp1.name = "Ashok";

Informacije sadržane u jednoj strukturnoj varijabli mogu se dodijeliti drugoj varijabli strukture iste vrste kao što slijedi.


emp1.name = "Ashok"; emp1.company_name = "Teckpix"; emp1.city = "Delhi"; emp2 = emp1; // dodjeljivanje vrijednosti člana emp1 em emp2. cout <

Ovdje smo dodijelili varijablu strukture 'emp1' to 'emp2', pa 'emp1' kopira svu vrijednost svojih članova u odgovarajućeg člana 'epm2'.

Član varijable strukture može se prenijeti u funkciju.

Funct (emp1.city);

Cijela varijabla strukture može se prenijeti u funkciju, obje metode poziva po vrijednosti i pozive referencom.

funt (emp1); // funkcija pozivanja pozivom metodom vrijednosti. , , void funct (strukt. zaposlenik emp) {// primanje vrijednosti članova emp1. cout <

Ovdje se promjena vrijednosti člana varijable strukture neće odražavati izvan funkcije jer se varijabla prenosi pozivom metodom vrijednosti. A sada učinimo istu stvar pozivom referentnom metodom.

funt (i emp1); // funkcija pozivanja pozivom referentnom metodom. , , void funct (strukturni zaposlenik * emp) {// prijemna adresa em1. Poslodavci> Grad = "Nur"; // promijeniti vrijednost člana (grada) varijable strukture emp1. , }

Ovdje se strukturna varijabla prenosi referencom, tako da se promjena vrijednosti člana strukture varijable također odražava i izvan funkcije.

srtuct zaposlenik * emp; // uklanjanje strukturalnog pokazivača tipa zaposlenika. EMP = emp1; // dodjeljivanju adrese emp1 pokazivaču. emp-> city // pokazivač koji pristupa gradu članu emp1.

Može se stvoriti i pokazivač na strukturu; ima adresu varijable strukture.

U strukturi je inicijalizacija agregata dopuštena kada definicija strukture ne sadrži bilo koju definiranu od strane korisnika konstruktora ili virtualne funkcije ili osnovnu klasu ili privatno ili zaštićeno polje.

int main () {struct epm3 = {"Anil", "Teckpix", "Nur"}; } // Moguće jer struktura zaposlenika ne sadrži nijednu od gore spomenutih stvari.

Definicija unije

Sindikat je memorijska lokacija koju dijeli dva ili više različitih vrsta varijabli deklarisanih pod jednim tipom unije. Ključna riječ koja se upotrebljava za proglašavanje sindikata je "unija". U C ++, unija može sadržavati i funkciju člana i varijable. Svi članovi sindikata prema zadanom su "javni". Izjava o “sindikatu” slična je deklaraciji o strukturi.

unije u_type {int x, char c; plutati f; } u1, u2;

Ovdje smo proglasili uniju pod nazivom u_type. Članovi u_type su 'x' cjelobrojnog tipa, 'c' karakternog tipa i 'f' float tipa. Neposredno nakon proglašenja unije stvorili smo i sindikalne varijable 'u1' i 'u2', tipa 'u_type'. Sindikalnu varijablu također možemo proglasiti odvojeno od deklaracije sindikata.

int main () {union u_type u1, u2; // Ključna riječ unija nije obvezna u C ++. }

Pristup članovima sindikata može se izvršiti korištenjem dot (.) Operatera, a ispred njega je varijabla unije i slijedi član te varijable.

u1.x = 10;

Kao i strukture, zbirna inicijalizacija nije moguća u uniji. Kao što znamo sindikat dijeli isto memorijsko mjesto za sve svoje članove odjednom se samo jedna varijabla inicijalizira, a sva se varijabla automatski ažurira s inicijaliziranom vrijednošću.

u1.x = 10; cout <

Ako pokušate promijeniti vrijednost bilo kojeg člana 'u1'. Drugi član će se automatski ažurirati na tu vrijednost.

u1.c = 65; cout <

Prostor koji je sindikatu dodijeljen jednak je veličini najvećeg člana sindikata. Kako je bajt dodijeljen 'char' 1 bajt, 'int' je 4 bajta, a 'float' je 4 bajta, tako je najveća veličina 4 bajta. Dakle, memorija dodijeljena 'u1' i 'u2' je 4 bajta.

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

Pokazivač na uniju može se stvoriti jednako kao i po strukturi. Pokazivač sadrži adresu sindikata.

unija u_type * un; un = u1; cout <x; // 10

Kao i struktura, unija se također može prenijeti na funkcije obje metode, tj. Poziv po vrijednosti i poziv referencom.

Funct (u1); // funkcija pozivanja pozivom metodom vrijednosti. , , void funct (unija u_type un) {// primanje vrijednosti člana u1. cout <

A sada, nazovimo funkciju pomoću poziva referentnom metodom.

Funct (u1 i); // funkcija pozivanja pozivom metodom refrence. , , void funct (unija u_type un) {// primanje adrese u1. un-> x = 20. }

Postoji posebna vrsta unije u C ++ koja se zove Anonimna unija “. Anonimni savez ne može imati naziv vrste i ne može se stvoriti varijabla takvog saveza. Samo je reći prevoditelju da njegove varijable članice trebaju dijeliti istu lokaciju. Promjena varijable anonimnog saveza može se uputiti bez uobičajenog operatora dot (.).

int main () {union {// definirati anonimnu uniju s imenom tipa. int x, char c; plutati f; }; x = 10; // referencirao je varijablu unije s out dot operator cout <

U anonimnoj uniji nije dopuštena nijedna funkcija člana, ne može sadržavati privatne ili zaštićene podatke, a globalna anonimna unija mora biti navedena kao "statična".

Točke kojih se treba sjećati za uobičajenu sindikalnu deklaraciju.

  • Definicija unije može također sadržavati konstruktor i destruktor.
  • Sindikat pruža više načina za prikaz iste memorijske lokacije.
  • Sindikat ne može naslijediti klasu bilo koje vrste.
  • Sindikat ne može biti osnovna klasa.
  • Sindikat ne može imati funkciju virtualnog člana.
  • Sindikat ne može imati statičku varijablu.
  1. Struktura koristi različite memorijske lokacije za različite članove. Dakle, različita vrijednost može se dodijeliti svim članovima. No, savez dodjeljuje isto mjesto memorije svim članovima. Dakle, jedna se vrijednost može dodijeliti svim članovima.
  2. Struktura ima različito mjesto memorije za sve članove; prema tome, može sadržavati više vrijednosti odjednom, a kao što znamo sindikat dijeli istu memorijsku lokaciju za sve članove, stoga može pohraniti jednu vrijednost istovremeno.
  3. Općenito, ukupna veličina strukture je veća od ukupne veličine sindikata, jer je veličina strukture zbroj veličine svih članova strukture, a veličina sindikata je veličina člana udruge najveći tip.
  4. Struktura pruža jedinstveni prikaz svake lokacije dok, unija pruža više prikaza jedne lokacije.
  5. Možete proglasiti anonimnu uniju, ali ne i anonimnu strukturu.

sličnosti:

  • I struktura i unija imaju isti način deklariranja, stvaranja varijabli i isti način pristupa članovima varijabli.
  • I struktura i unija mogu se prenijeti u funkciju obje metode poziva vrijednosti i poziva referencom.
  • I Struktura i unija su tip podataka s spremnikom i sadrže objekt bilo kojeg tipa podataka, uključujući drugu strukturu, union, matriku kao njihovi članovi.

Zaključak:

Obje, struktura i unija su podatkovni tip spremnika koji sadrži člana različitih vrsta. Ali strukture se koriste kada moramo pohraniti različite vrijednosti za sve članove na različitom memorijskom mjestu. Sindikati se koriste kada je potrebna pretvorba tipa.