Darmowe Forum
Kwiecień 27, 2024, 23:45:50 *
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Aktualności: Forum zostało uruchomione!
 
   Strona główna   Pomoc Zaloguj się Rejestracja  
Strony: [1]
  Drukuj  
Autor Wątek: Struktury i Unie w C++  (Przeczytany 6265 razy)
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« : Grudzień 07, 2011, 12:32:05 »

W pojedynczej tablicy o nazwie np. Adam można zgrupować tylko zmienne jednego typu. Np. tablica  char Adam [10][10] może przechowywać tylko zmienne znakowe. Co zrobić jeżeli pod jedną nazwą chcemy przechować kilka zmiennych różnych typów. W Pascalu istnieje struktura która nazywa się record i pozwala przechowywać różne typy zmiennych (np. imie, nazwisko, wiek, nr telefonu). W Języku C i C++ odpowiednikiem pascalowskiego rekordu jest konstrukcja programistyczna nazywana strukturą.
Struktura to powiązane ze sobą dane różnych typów. Nazwę struktury deklaruje się podobnie jak zmienną pisząc przed nazwą słowo struct.
struct Adam

Każda struktura może zawierać różne pola ale nie  jest obiektem (!) lecz jest bardziej złożonym układem  niż pojedyncza zmienna i składa się z pól.
Poniżej przykład deklaracji struktury o nazwie Adam składającej się z pól : wiek, wzrost, nazwisko. Strukturę można wykorzystać do tworzenia bazy danych osób o imieniu Adam.

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct Adam {int wzrost;
             int wiek;
             char nazwisko[20];};

    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Grudzień 07, 2011, 12:43:51 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #1 : Grudzień 07, 2011, 12:33:10 »

Samo zadeklarowanie struktury, określa tylko szkielet tego co ma się w niej znaleźć. Szkielet trzeba wypełnić treścią. Do tego służy deklaracja zmiennych strukturalnych. Można to porównać do projektu samochodu, wszystkie mają mieć 4 koła, kabinę chroniącą przed deszczem i silnik. Jaki konkretnie to będzie samochód zależy od tego jakiego rozmiaru będą koła , jak wyglądać będzie kabina  itd...
W naszym przypadku należy zadeklarować zmienne strukturalne które będą już konkretnymi wykonaniami struktury Adam. W skrypcie poniżej przedstawiono trzy zmienne a1,a2,a3 będące typami struktury Adam.

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct Adam {int wzrost;
             int wiek;
             char nazwisko[20];};
             struct Adam a1,a2,a3;

    system("PAUSE");
    return EXIT_SUCCESS;
}
 
« Ostatnia zmiana: Grudzień 07, 2011, 12:43:05 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #2 : Grudzień 07, 2011, 12:34:10 »

Każda ze zmiennych a1, a2 i a3 posiada takie same pola jak struktura Adam. Dlatego można do tych zmiennych wpisać już konkretne dane. Np. jeżeli chcemy wpisać do zmiennej a1 wiek, wzrost nazwisko trzeba wpisać:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct Adam {int wzrost;
             int wiek;
             char nazwisko[120];};
             struct Adam a1,a2,a3;
a1.wzrost=123;
a1.wiek=99;
strcpy(a1.nazwisko,"Bielomuslikajewicius");

    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #3 : Grudzień 07, 2011, 12:34:59 »

Możliwe jest zadeklarowanie struktury (a4) już z gotowymi, wypełnionymi polami. Jeżeli pola mają być zadeklarowane, to konieczne jest zbudowanie struktury statycznej czyli poprzedzonej słowem static.

Wyświetlenie określonego pola jest możliwe jeżeli do nazwy struktury po kropce umieszczona zostanie nazwa pola.
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct Adam {int wzrost;
             int wiek;
             char nazwisko[120];};
             struct Adam a1,a2,a3;
static struct Adam a4={22,123," Piramodopolopirynowicz"};
a1.wzrost=123;
a1.wiek=99;
strcpy(a1.nazwisko,"Bielomuslikajewicius");
a2=a1;
cout<<a2.wiek<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #4 : Grudzień 07, 2011, 12:36:37 »

Wskaźnik i operator ->, polecenie strcpy();
To trudny temat, ale warto o nim popisać. Wskaźnik * może wskazywać strukturę w całości lub element struktury . Operator -> pozwala na odwołanie się do elementów struktury.

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct Adam {int wzrost;
             int wiek;
             char nazwisko[120];};
             struct Adam a1,a2,a3;
static struct Adam a4={22,123," Piramodopolopirynowicz"};
struct Adam *miecio; /* *miecio to wskaźnik na strukturę*/
miecio=&a1;
miecio->wzrost=345;
cout<<a1.wzrost<<endl;

a1.wzrost=123;
a1.wiek=99;
strcpy(a1.nazwisko,"Bielomuslikajewicius");
a2=a1;
cout<<a2.wiek<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
Patrz wytłuszczony tekst:
linia1: zadeklarowano wskaźnik struktury Adam, wskaźnik nazywa się miecio, oznacza to tylko tyle,że pod nazwą miecio trzeba zarezerwować tyle adresów ile jest pól w strukturze Adam.
linia2: Do wskaźnika miecio przypisywane są adresy poszczególnych pól zmiennej strukturalnej a1.
linia3: do adresu wskazywanego przez wskaźnik miecio opisującego pole wzrost wpisać liczbę 345.
linia4: wyświetlić pole a1.wzrost
« Ostatnia zmiana: Grudzień 14, 2011, 11:02:27 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #5 : Grudzień 07, 2011, 12:42:32 »

Unia - krótko o strukturze przypominającej typ struct.
Unia jest zmienną, która w różnych momentach może przechowywać w tym samym miejscu pamięci obiekty różnych typów. Obiekty typu unia wymagają do zapisu tyle bajtów pamięci ile wynosi liczba bajtów potrzebna na przechowanie najdłuższego elementu unii. Deklaracja unii podobna jest do deklaracji struktury, tyle tylko, że dokonuje się jej przy pomocy słowa kluczowego union.
Operacje dozwolone na strukturach są dozwolone na uniach : kopiowanie i przypisywanie unii traktowanych jako całość, pobieranie adresu, dostęp do ich składowych.
Należy pamiętać o tym, aby do przypisywania składników unii zadeklarować taką zmienną, która będzie mogła przechować najdłuższą składowa unii.

Sposób deklaracji i operowania uniami przedstawimy na przykładzie:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
union {int licz;
char slowo[25];
} to_unia;

char znak=0;
system("cls");
cout<<"Duze A  umozliwia wyjscie z petli";
while (znak!='A'){
      cout<<endl<<"Podaj cyfre: ";znak=getchar();
if (znak>47&&znak<58){to_unia.licz=znak-48;}
else {to_unia.slowo[0]=znak;
to_unia.slowo[1]='\0';}
cout<<endl<<"Pole jako cyfra/liczba:  Pole jako napis:"<<endl;
cout<<to_unia.licz<<"  "<<to_unia.slowo;
}
    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Grudzień 14, 2011, 11:25:37 wysłane przez admin » Zapisane
Strony: [1]
  Drukuj  
 
Skocz do:  

Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC | Sitemap

Polityka cookies
Darmowe Fora | Darmowe Forum

gry zaburzenia imindel wladca-smokow magiaslonca