Różnica między strukturą a połączeniem

Autor: Laura McKinney
Data Utworzenia: 1 Kwiecień 2021
Data Aktualizacji: 16 Móc 2024
Anonim
Różnica między strukturą a połączeniem - Technologia
Różnica między strukturą a połączeniem - Technologia

Zawartość


C ++ pozwala na wszystkie pięć sposobów, które zapewnia język C, na tworzenie niestandardowych danych. Tych pięć sposobów to „struktura”, „pole bitowe”, „unia”, „wyliczenie”, „typedef”. W poniższym artykule zajmiemy się różnicą między strukturą a zjednoczeniem. Zarówno struktura, jak i związek są typami danych kontenera, które mogą przechowywać dane dowolnego „typu”. Jedną z głównych różnic, które odróżniają strukturę i połączenie, jest to, że struktura ma osobne miejsce pamięci dla każdego ze swoich członków, podczas gdy członkowie związku dzielą tę samą lokalizację pamięci.

Rozumiemy różnicę między strukturą a zjednoczeniem wraz z tabelą porównawczą.

  1. Wykres porównania
  2. Definicja
  3. Kluczowe różnice
  4. Podobieństwa
  5. Wniosek

Wykres porównania

Podstawa porównaniaStrukturaUnia
PodstawowyOddzielna lokalizacja pamięci jest przydzielona każdemu członkowi struktury.Wszyscy członkowie związku dzielą tę samą lokalizację pamięci.
Deklaracjastruct struct_name {
wpisz element1;
wpisz element2;
.
.
} zmienna 1, zmienna 2, ...;
u_name {
wpisz element1;
wpisz element2;
.
.
} zmienna 1, zmienna 2, ...;
słowo kluczowestructunia
RozmiarRozmiar struktury = suma wielkości wszystkich elementów danych.Rozmiar Unii = wielkość największych członków.
Wartość sklepuPrzechowuje odrębne wartości dla wszystkich członków.Przechowuje tę samą wartość dla wszystkich członków.
Na czasStruktura przechowuje wiele wartości różnych elementów struktury.Związek przechowuje pojedynczą wartość naraz dla wszystkich członków.
Sposób oglądaniaPodaj jeden sposób wyświetlania każdej lokalizacji pamięci.Podaj wiele sposobów, aby wyświetlić tę samą lokalizację pamięci.
Funkcja anonimowaBrak funkcji anonimowych.Anonimowy związek można zadeklarować.

Definicja struktury

Struktura jest zbiorem zmiennych różnych typów danych, które są nazywane wspólną nazwą. Zmienne w strukturze nazywane są „elementami”. Domyślnie wszyscy członkowie struktury są „publiczni”. Deklarując strukturę, tworzysz szablon, którego można używać do tworzenia obiektów struktury, współużytkując tę ​​samą organizację elementów danych i funkcji elementów. Deklaracja struktury jest zawsze poprzedzona słowem kluczowym „struct”, które informuje kompilator, że struktura została zadeklarowana. Weźmy przykład.


Weźmy przykład.

struct pracownik {nazwa ciągu; ciąg nazwa_firmy; miasto strun; } emp1, emp2;

Tutaj deklarujemy strukturę do przechowywania informacji pracowników. Deklaracja jest zakończona średnikiem, ponieważ deklaracja struktury jest instrukcją, aw C ++ instrukcja jest zakończona średnikiem.

Nazwa nadana strukturze definiuje „typ” (w powyższym przykładzie nazwa struktury to „pracownik”). Zmienne tych typów można utworzyć, ponieważ powyżej utworzyliśmy dwie zmienne „emp1” i „emp2” typu „pracownik”. W powyższym przykładzie utworzyliśmy zmienną „struktura” zaraz po deklaracji; alternatywnie można go utworzyć osobno.

struct pracownik emp1, emp2; // słowo kluczowe struct nie jest obowiązkowe.

Elementy zmiennej struktury można zainicjować lub uzyskać do nich dostęp za pomocą operatora kropki (.).

emp1.name = "ashok";

Informacje zawarte w jednej zmiennej struktury można przypisać do innej zmiennej struktury tego samego typu, jak poniżej.


emp1.name = "ashok"; emp1.company_name = "Teckpix"; emp1.city = "Delhi"; emp2 = emp1; // przypisywanie wartości elementu emp1 do emp2. cout <

Tutaj przypisaliśmy zmienną struktury „emp1” do „emp2”, więc „emp1” kopiuje wszystkie wartości swoich elementów do odpowiedniego elementu „epm2”.

Element zmiennej struktury można przekazać do funkcji.

funk (emp1.city);

Cała zmienna struktury może być przekazana do funkcji, zarówno metodami call by value, jak i call by reference.

funt (emp1); // wywołanie funkcji metodą call by value . . void FUN (struct pracownik emp) {// odbieranie wartości członków emp1. cout <

W tym przypadku zmiana wartości elementu zmiennej struktury nie będzie odzwierciedlać poza funkcją, ponieważ zmienna jest przekazywana metodą call by value. Teraz zróbmy to samo przez wywołanie metodą referencyjną.

funt (& emp1); // wywołanie funkcji przez wywołanie metodą referencyjną. . . void FUN (struct pracownik * emp) {// adres odbiorczy emp1. emp-> miasto = "Nur"; // zmień wartość członka (miasta) zmiennej struktury emp1. . }

W tym przypadku zmienna struktury jest przekazywana przez odniesienie, więc zmiana wartości elementów zmiennej struktury również odzwierciedla poza funkcją.

srtuct pracownik * emp; // dekalowanie wskaźnika struktury typu pracownik. emp = & emp1; // przypisanie adresu emp1 do wskaźnika. emp-> miasto // wskaźnik uzyskujący dostęp do miasta członkowskiego emp1.

Można również utworzyć wskaźnik do struktury; przechowuje adres zmiennej struktury.

W strukturze dozwolone jest inicjowanie agregatów, gdy definicja struktury nie zawiera żadnego konstruktora lub funkcji wirtualnych zdefiniowanych przez użytkownika, klasy bazowej lub pola prywatnego lub chronionego.

int main () {struct epm3 = {"Anil", "Teckpix", "Nur"}; } // Możliwe, ponieważ struktura pracownika nie zawiera żadnej z wyżej wymienionych rzeczy.

Definicja Unii

Związek to lokalizacja pamięci współdzielona przez co najmniej dwa różne typy zmiennych zadeklarowanych w ramach jednego typu związku. Słowem kluczowym używanym do deklarowania związku jest „związek”. W C ++ związek może zawierać zarówno funkcję członka, jak i zmienne. Domyślnie wszyscy członkowie związku są „publiczni”. Deklaracja „unii” jest podobna do deklaracji struktury.

union u_type {int x, char c; pływak f; } u1, u2;

Tutaj zadeklarowaliśmy związek o nazwie u_type. Członkowie typu u_type to „x” typu liczb całkowitych, „c” typu znaków i „f” typu float. Stworzyliśmy również zmienne unii „u1” i „u2” typu „u_type” tuż po deklaracji związku. Możemy również zadeklarować zmienną union niezależnie od deklaracji union.

int main () {union u_type u1, u2; // Związek słów kluczowych nie jest obowiązkowy w C ++. }

Dostęp do członków unii można uzyskać za pomocą operatora kropki (.), Poprzedzonego zmienną union i podążającą za członkiem tej zmiennej.

u1.x = 10;

Podobnie jak struktury, agregacja inicjalizacji nie jest możliwa w unii. Jak wiemy, związek dzieli tę samą lokalizację pamięci dla wszystkich swoich elementów jednocześnie, tylko jedna zmienna jest inicjowana, a wszystkie zmienne są automatycznie aktualizowane o zainicjowanej wartości.

u1.x = 10; cout <

Jeśli spróbujesz zmienić wartość dowolnego członka „u1”. Drugi członek zostanie automatycznie zaktualizowany do tej wartości.

u1.c = 65; cout <

Miejsce przydzielone do związku jest równe wielkości największego członka związku. Ponieważ bajt przypisany do „char” to 1 bajt, „int” to 4 bajty, a „float” to 4 bajty, więc największy rozmiar to 4 bajty. Pamięć przydzielona do „u1” i „u2” to 4 bajty.

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

Wskaźnik do unii można utworzyć podobnie jak w strukturze. Wskaźnik zawiera adres związku.

union u_type * un; un = & u1; cout <x; // 10

Podobnie jak struktura, połączenie może być również przekazane do funkcji za pomocą obu metod, tj. Wywołania według wartości i wywołania przez odniesienie.

funk (u1); // wywołanie funkcji metodą call by value . . void function (union u_type un) {// odbieranie wartości członka u1. cout <

Teraz wywołajmy funkcję przy użyciu metody call by reference.

funk (& u1); // wywołanie funkcji przez wywołanie metodą referencyjną. . . void function (union u_type un) {// odbieranie adresu u1. un-> x = 20. }

W C ++ istnieje specjalny typ unii zwany Anonymous Union ”. Anonimowy związek nie może mieć nazwy typu i nie można utworzyć żadnej zmiennej takiego związku. Służy tylko poinstruowaniu kompilatora, że ​​jego zmienne składowe mają współdzielić tę samą lokalizację. Do zmiennej anonimowego związku można się odwoływać bez zwykłego operatora kropki (.).

int main () {union {// zdefiniuj anonimowy związek bez nazwy typu. int x, char c; pływak f; }; x = 10; // odwołano do zmiennej uni bez operatora kropki cout <

W związku anonimowym żadna funkcja członka nie jest dozwolona, ​​nie może zawierać danych prywatnych ani chronionych, a globalny związek anonimowy musi być określony jako „statyczny”.

Należy pamiętać o zwykłej deklaracji związkowej.

  • Definicja unii może również zawierać konstruktor i destruktor.
  • Związek zapewnia wiele sposobów wyświetlania tej samej lokalizacji pamięci.
  • Związek nie może dziedziczyć klasy dowolnego typu.
  • Związek nie może być klasą podstawową.
  • Związek nie może mieć funkcji wirtualnego elementu członkowskiego.
  • Związek nie może mieć zmiennej statycznej.
  1. Struktura używa różnych lokalizacji pamięci dla różnych członków. Dlatego odrębną wartość można przypisać wszystkim członkom. Ale związek przydziela wszystkim członkom tę samą lokalizację pamięci. Dlatego wszystkim członkom można przypisać jedną wartość.
  2. Struktura ma inną lokalizację pamięci dla wszystkich członków; stąd może zawierać wiele wartości na raz, a ponieważ wiemy, że związek ma tę samą lokalizację pamięci dla wszystkich członków, może przechowywać jedną wartość na raz.
  3. Zasadniczo całkowity rozmiar struktury jest większy niż całkowity rozmiar unii, ponieważ rozmiar struktury jest sumą wielkości wszystkich elementów konstrukcji, a rozmiar unii jest wielkością elementu największy typ.
  4. Struktura zapewnia pojedynczy widok każdej lokalizacji, natomiast unia zapewnia wiele widoków jednej lokalizacji.
  5. Możesz zadeklarować anonimowy związek, ale nie anonimową strukturę.

Podobieństwa:

  • Zarówno struktura, jak i związek mają ten sam sposób deklarowania się, tworzenia zmiennych i taki sam sposób uzyskiwania dostępu do elementów zmiennych.
  • Zarówno Strukturę, jak i połączenie można przekazać do funkcji za pomocą obu metod wywołania według wartości i wywołania przez odwołanie.
  • Zarówno Struktura, jak i połączenie są typem danych kontenera i zawierają obiekt dowolnego typu danych, w tym inną strukturę, połączenie, tablicę jako ich elementy.

Wniosek:

Zarówno struktura, jak i związek są typem kontenera, który zawiera element członkowski różnych typów. Ale struktury są używane, gdy musimy przechowywać odrębną wartość dla wszystkich członków w odrębnym miejscu pamięci. Związki są używane, gdy konieczna jest konwersja typu.