Rozdíl mezi strukturou a unií

Autor: Laura McKinney
Datum Vytvoření: 1 Duben 2021
Datum Aktualizace: 7 Smět 2024
Anonim
Rozdíl mezi strukturou a unií - Technologie
Rozdíl mezi strukturou a unií - Technologie

Obsah


C ++ umožňuje všech pět způsobů, které poskytuje jazyk C, k vytvoření vlastních dat. Těmito pěti způsoby jsou „struktura“, „bitové pole“, „unie“, „výčet“, „typedef“. V následujícím článku se budeme zabývat rozdílem mezi strukturou a unií. Struktura i spojení jsou datové typy kontejneru, které pojmou data jakéhokoli typu. Jedním z hlavních rozdílů, které odlišují strukturu a spojení, je to, že struktura má samostatné paměťové umístění pro každého ze svých členů, zatímco členové unie sdílejí stejné paměťové umístění.

Pojďme pochopit rozdíl mezi strukturou a unií, spolu s srovnávací tabulkou.

  1. Srovnávací tabulka
  2. Definice
  3. Klíčové rozdíly
  4. Podobnosti
  5. Závěr

Srovnávací tabulka

Základ srovnáníStrukturasvaz
ZákladníSamostatné umístění paměti je přiděleno každému členu struktury.Všichni členové unie sdílejí stejné umístění v paměti.
Prohlášenístruct struct_name {
typ element1;
typ element2;
.
.
} proměnná1, proměnná2, ...;
unie u_name {
typ element1;
typ element2;
.
.
} proměnná1, proměnná2, ...;
klíčové slovostruktursvaz
VelikostVelikost struktury = součet velikosti všech datových členů.Velikost unie = velikost největších členů.
Hodnota obchoduUkládá odlišné hodnoty pro všechny členy.Uchovává stejnou hodnotu pro všechny členy.
VčasStruktura ukládá několik hodnot struktury různých členů.Jednota ukládá jednotlivým hodnotám najednou všechny členy.
Způsob prohlíženíPoskytněte jediný způsob zobrazení každého umístění paměti.Poskytněte více způsob zobrazení stejného umístění v paměti.
Anonymní funkceŽádné anonymní funkce.Anonymní unie může být deklarována.

Definice struktury

Struktura je soubor proměnných různých datových typů, které jsou označovány běžným názvem. Proměnné ve struktuře se nazývají „členové“. Ve výchozím nastavení jsou všichni členové struktury „veřejné“. Když deklarujete strukturu, vytvoříte šablonu, kterou lze použít k vytvoření strukturních objektů, sdílení stejné organizace datových členů a členských funkcí. Deklaraci struktury vždy předchází klíčové slovo „struct“, které říká kompilátoru, že struktura byla deklarována. Vezměme si příklad.


Vezměme si příklad.

struct zaměstnance {název řetězce; string company_name; řetězcové město; } emp1, emp2;

Zde deklarujeme strukturu pro ukládání informací zaměstnanců. Deklarace je ukončena středníkem, protože deklarace struktury je příkaz a v C ++ je příkaz ukončen středníkem.

Jméno dané struktuře definuje „typ“ (ve výše uvedeném příkladu je jméno struktury „zaměstnanec“). Proměnné těchto typů by mohly být vytvořeny, jak je uvedeno výše, vytvořili jsme dvě proměnné „emp1“ a „emp2“ typu „zaměstnanec“. Ve výše uvedeném příkladu jsme vytvořili proměnnou „struktura“ hned po deklaraci; alternativně by to mohlo být vytvořeno samostatně.

strukturovat zaměstnance emp1, emp2; // struktura klíčových slov není povinná.

Členy strukturní proměnné mohou být inicializovány nebo k nim lze přistupovat pomocí dot (.) Operátoru.


emp1.name = "ashok";

Informace obsažené v jedné strukturní proměnné mohou být přiřazeny jiné strukturní proměnné stejného typu, jako je uvedeno níže.

emp1.name = "ashok"; emp1.company_name = "Teckpix"; emp1.city = "Delhi"; emp2 = emp1; // přiřazení hodnot člena emp1 emp2. cout <

Zde jsme přiřadili strukturní proměnnou „emp1“ na „emp2“, takže „emp1“ zkopíruje veškerou hodnotu svých členů do odpovídajícího člena „epm2“.

Člen strukturní proměnné lze předat funkci.

funct (emp1.city);

Celá proměnná struktury může být předána funkci, a to jak metodami call by value, tak call by reference.

funt (emp1); // volání funkce metodou volání podle hodnoty. . . void funct (struct empir zaměstnance) {// přijímání hodnot členů emp1. cout <

Zde se změna hodnoty člena strukturní proměnné neodráží mimo funkci, protože proměnná je předávána metodou volání podle hodnoty. Nyní udělejme totéž voláním referenční metodou.

funt (& emp1); // volání funkce volaním referenční metodou. . . void funct (struct zaměstnanec * emp) {// přijímací adresa emp1. emp-> city = "Nur"; // změní hodnotu člena (města) proměnné struktury emp1. . }

Zde je strukturní proměnná předávána odkazem, takže změna hodnoty členů strukturní proměnné se odráží také mimo funkci.

srtuct zaměstnanec * emp; // decalring ukazatel struktury typu zaměstnance. emp = & emp1; // přiřazení adresy emp1 ukazateli. emp-> city // ukazatel přístup k členskému městu emp1.

Ukazatel na strukturu lze také vytvořit; drží adresu proměnné struktury.

Ve struktuře je inicializace agregátu povolena, pokud definice struktury neobsahuje, žádné uživatelem definované konstruktor nebo virtuální funkce nebo základní třídu nebo soukromé nebo chráněné pole.

int main () {struct epm3 = {"Anil", "Teckpix", "Nur"}; } // Možné, protože struktura zaměstnance neobsahuje žádné z výše uvedených věcí.

Definice Unie

Spojení je umístění paměti sdílené dvěma nebo více různými typy proměnných deklarovaných pod jedním typem spojení. Klíčové slovo použité k deklaraci unie je „unie“. V C ++ může unie obsahovat jak členské funkce, tak proměnné. Standardně jsou všichni členové unie „veřejní“. Prohlášení „unie“ je podobné deklaraci struktury.

unie u_type {int x, char c; float f; } u1, u2;

Zde jsme vyhlásili unii s názvem u_type. Členové typu u_type jsou „x“ celočíselného typu, „c“ znakového typu a „f“ typu float. Také jsme vytvořili unijní proměnné typu „u1“ a „u2“ typu „u_type“, a to hned po vyhlášení spojení. Můžeme také deklarovat unijní proměnnou odděleně od deklarace unie.

int main () {union u_type u1, u2; // Spojení klíčových slov není v C ++ povinné. }

Přístup k členům unie lze provést pomocí operátoru dot (.), Kterému předchází proměnná union a následuje člen této proměnné.

u1.x = 10;

Stejně jako u struktur není inicializace agregátů v unii možná. Jak víme, unie sdílí stejné paměťové místo pro všechny své členy najednou, inicializuje se pouze jedna proměnná a veškerá proměnná se automaticky aktualizuje o inicializovanou hodnotu.

u1.x = 10; cout <

Pokud se pokusíte změnit hodnotu kteréhokoli člena „u1“. Druhý člen bude automaticky aktualizován na tuto hodnotu.

u1.c = 65; cout <

Prostor přidělený unii se rovná velikosti největšího člena unie. Protože bajt přiřazený znaku „char“ je 1 bajt, „int“ je 4 bajt a „float“ jsou 4 bajty, takže největší velikost je 4 bajty. Paměť přidělená „u1“ a „u2“ je tedy 4 bajty.

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

Ukazatel na unii lze vytvořit stejně jako ve struktuře. Ukazatel drží adresu unie.

unie u_type * un; un = & u1; cout <X; // 10

Stejně jako struktura může být spojení předáno funkcím oběma metodami, tj. Voláním podle hodnoty a voláním odkazem.

funkce (u1); // volání funkce metodou volání podle hodnoty. . . void funct (union u_type un) {// příjem hodnoty člena u1. cout <

Nyní zavoláme funkci pomocí metody volání referencí.

funct (& u1); // volání funkce pomocí metody chlazení. . . void funct (union u_type un) {// příjem adresy u1. un-> x = 20. }

V C ++ existuje zvláštní typ unie nazvaný Anonymní unie “. Anonymní unie nemůže mít název typu a nelze vytvořit žádnou proměnnou takové unie. Je to jen říct kompilátoru, že jeho členské proměnné mají sdílet stejné umístění. Proměnná anonymního spojení může být uvedena bez běžného tečkového (.) Operátora.

int main () {union {// definuje anonymní spojení bez názvu typu. int x, char c; float f; }; x = 10; // odkázal unixovou proměnnou s operátorem cout out dot <

V anonymní unii nejsou povoleny žádné členské funkce, nemohou obsahovat soukromá nebo chráněná data a globální anonymní unie musí být specifikována jako „statická“.

Body, které je třeba pamatovat na normální deklaraci unie.

  • Definice unie může také obsahovat konstruktor a destruktor.
  • Spojení poskytuje několik způsobů, jak zobrazit stejné umístění v paměti.
  • Unie nemůže zdědit třídu jakéhokoli typu.
  • Unie nemůže být základní třídou.
  • Spojení nemůže mít funkci virtuálního člena.
  • Spojení nemůže mít statickou proměnnou.
  1. Struktura používá různé umístění paměti pro různé členy. Zřetelnou hodnotu lze tedy přiřadit všem členům. Unie však všem členům přidělí stejné paměťové umístění. Proto může být všem členům přidělena jediná hodnota.
  2. Struktura má různé umístění paměti pro všechny členy; proto může obsahovat více hodnot najednou, a protože víme, že unie sdílí stejné paměťové umístění pro všechny členy, může ukládat jednu hodnotu najednou.
  3. Obecně je celková velikost struktury větší než celková velikost svazku, protože velikost struktury je součtem velikosti všech členů struktur a velikost svazku je velikost člena svazku největší typ.
  4. Struktura poskytuje jediný pohled na každé místo, zatímco unie poskytuje více pohledů na jedno místo.
  5. Můžete prohlásit anonymní unii, ale nikoli anonymní strukturu.

Podobnosti:

  • Struktura i jednota mají stejný způsob deklarace sebe sama, vytváření proměnných a stejný způsob přístupu k členům proměnných.
  • Struktura i spojení mohou být předány funkci pomocí metod volání podle hodnoty a volání odkazem.
  • Struktura i spojení jsou datový typ kontejneru a obsahují jako objekt své členy jakýkoli datový typ, včetně jiné struktury, spojení a pole.

Závěr:

Struktura i spojení jsou datový typ kontejneru, který obsahuje člen různých typů. Struktury se však používají, když potřebujeme uložit zřetelnou hodnotu pro všechny členy na odlišném paměťovém místě. Odborové svazy se používají v případě potřeby převodu typu.