Struktury w C++
Często spotykamy się z sytuacjami, w których musimy przechowywać grupę danych, niezależnie od tego, czy mają one podobne, czy niepodobne typy danych. Widzieliśmy tablice w C++, które służą do przechowywania zestawu danych podobnych typów w sąsiadujących lokalizacjach pamięci.
W odróżnieniu od tablic, Struktury w C++ to typy danych zdefiniowane przez użytkownika, które służą do przechowywania grup elementów o różnych typach danych.
Co to jest struktura?
Struktura to typ danych zdefiniowany przez użytkownika w języku C/C++. Struktura tworzy typ danych, którego można użyć do grupowania elementów możliwie różnych typów w jeden typ.
Struktury w C++
Jak stworzyć strukturę?
Do utworzenia struktury używane jest słowo kluczowe „struct”. Ogólna składnia tworzenia struktury jest pokazana poniżej:
struct structureName{ member1; member2; member3; . . . memberN; }; Struktury w C++ mogą zawierać dwa typy elementów:
- Członek danych: ci członkowie są normalnymi zmiennymi C++. W C++ możemy stworzyć strukturę ze zmiennymi o różnych typach danych. Funkcje członkowskie: ci członkowie są normalnymi funkcjami C++. Oprócz zmiennych możemy także zawrzeć funkcje w deklaracji struktury.
Przykład :
C++
// Data Members> int> roll;> int> age;> int> marks;> > // Member Functions> void> printDetails()> {> > cout < <> 'Roll = '> <'
'; cout < <'Age = ' < '
'; cout < <'Marks = ' < }> |
W powyższej strukturze elementami danych są trzy zmienne całkowite do przechowywania numer rolki, wiek i znaki dowolnego ucznia, a funkcją członkowską jest drukujSzczegóły() który drukuje wszystkie powyższe dane dowolnego ucznia.
Jak zadeklarować zmienne strukturalne?
Zmienną struktury można zadeklarować za pomocą deklaracji struktury lub jako osobną deklarację, jak typy podstawowe.
C++
// A variable declaration with structure declaration.> struct> Point> {> > int> x, y;> } p1;> // The variable p1 is declared with 'Point'> // A variable declaration like basic data types> struct> Point> {> > int> x, y;> };> int> main()> {> > struct> Point p1;> // The variable p1 is declared like a normal variable> }> |
Uwaga: W C++ słowo kluczowe struct jest opcjonalne przed deklaracją zmiennej. W C jest to obowiązkowe.
Jak zainicjować elementy struktury?
Członkowie struktury nie może być inicjalizowane deklaracją. Na przykład kompilacja następującego programu w języku C kończy się niepowodzeniem.
Ale jest uważany za poprawny w C++ 11 i nowszych wersjach.
C++
struct> Point> {> > int> x = 0;> // COMPILER ERROR: cannot initialize members here> > int> y = 0;> // COMPILER ERROR: cannot initialize members here> };> |
Powód powyższego błędu jest prosty: po zadeklarowaniu typu danych nie jest dla niego przydzielana żadna pamięć. Pamięć jest przydzielana tylko podczas tworzenia zmiennych.
Elementy struktury można inicjować deklaracją w języku C++. Na przykład następujący program C++ wykonuje się pomyślnie bez zgłaszania żadnego błędu.
C++
// In C++ We can Initialize the Variables with Declaration in Structure.> #include> using> namespace> std;> struct> Point {> > int> x = 0;> // It is Considered as Default Arguments and no Error is Raised> > int> y = 1;> };> int> main()> {> > struct> Point p1;> > // Accessing members of point p1> > // No value is Initialized then the default value is considered. ie x=0 and y=1;> > cout < <> 'x = '> < < p1.x < <> ', y = '> < < p1.y < // Initializing the value of y = 20; p1.y = 20; cout < < 'x = ' < < p1.x < < ', y = ' < < p1.y; return 0; } // This code is contributed by Samyak Jain> |
x=0, y=1 x=0, y=20
Elementy struktury można inicjować za pomocą nawiasów klamrowych „{}”. Na przykład poniżej znajduje się prawidłowa inicjalizacja.
C++
struct> Point {> > int> x, y;> };> int> main()> {> > // A valid initialization. member x gets value 0 and y> > // gets value 1. The order of declaration is followed.> > struct> Point p1 = { 0, 1 };> }> |
Jak uzyskać dostęp do elementów konstrukcji?
Dostęp do elementów struktury uzyskuje się za pomocą operatora kropki (.).
C++
#include> using> namespace> std;> struct> Point {> > int> x, y;> };> int> main()> {> > struct> Point p1 = { 0, 1 };> > // Accessing members of point p1> > p1.x = 20;> > cout < <> 'x = '> < < p1.x < <> ', y = '> < < p1.y;> > return> 0;> }> |
Wyjście
x = 20, y = 1
Co to jest tablica struktur?
Podobnie jak inne prymitywne typy danych, możemy tworzyć tablice struktur.
C++
#include> using> namespace> std;> struct> Point {> > int> x, y;> };> int> main()> {> > // Create an array of structures> > struct> Point arr[10];> > // Access array members> > arr[0].x = 10;> > arr[0].y = 20;> > cout < < arr[0].x < <> ' '> < < arr[0].y;> > return> 0;> }> |
Wyjście
10 20
Co to jest wskaźnik struktury?
Podobnie jak typy pierwotne, możemy mieć wskaźnik do struktury. Jeśli mamy wskaźnik do struktury, dostęp do elementów członkowskich uzyskujemy za pomocą operatora strzałki ( -> ) zamiast operatora kropki (.).
C++
#include> using> namespace> std;> struct> Point {> > int> x, y;> };> int> main()> {> > struct> Point p1 = { 1, 2 };> > // p2 is a pointer to structure p1> > struct> Point* p2 = &p1;> > // Accessing structure members using> > // structure pointer> > cout ' ' return 0; }> |
Wyjście
1 2
Co to jest wyrównanie elementów konstrukcji?
Widzieć Dowiedz się więcej o różnicach między strukturami i klasami w C++ .