[ Pobierz całość w formacie PDF ]
Można nawet powiedzieć, że w pojęciu języka C++ zarówno struktury jak i unie są typami "klasowymi", czyli typu class. Ale o tym pomówimy w przyszłym semestrze. Na tym wykładzie omówimy struktury w starym stylu, natomiast po omówieniu klas powrócimy do struktur w nowym ujęciu. Deklarację stuktury rozpoczyna słowo kluczowe struct. Podajmy przykład struktury odpowiedniej dla grafiki. Punkt opisują dwie współrzędne, zadeklarowane jako składowe struktury: struct point { int x; int x; } Po słowie struct występuje nazwa struktury (point) zwana etykietą struktury. Nazwy zmiennych występujących w strukturze nazywamy składowymi struktury. Obiekt typu struktura wymaga tyle pamięci do zapisu, ile wynosi suma pamięci koniecznej do zapisu poszczególnych składowych struktury. Składowa struktury, normalna zmienna, etykieta mogą mieć te same nazwy bez obawy o konflikt. Deklaracja struct jest definicją nowego typu złożonego. Po prawej klamrze zamykającej listę zmiennych może występować lista zmiennych, tak jak po każdym podstawowym typie. Zatem definicja: struct {...} x,y,z odpowiada składniowo definicji: int x,y,z; Deklaracja struktury, która nie zawiera listy zmiennych nie rezerwuje pamięci, jedynie opisuje wzorzec struktury. Mając deklarację struktury można używać jej do deklaracji zmiennych typu struktura np.: struct point punkt; //równoważne point punkt; deklaruje zmienną punkt będącą strukturą typu point. Strukturę można zainicjować dopisując na końcu jej definicji listę wartości początkowych jej składowych np: struct point maxpoint = {320,200}; W wyrażeniach dostęp do konkretnej składowej struktury umożliwia konstrukcja: nazwa_struktury.składowa dla zmiennej strukturalnej punkt owdołania są nastepujące: a = punkt.x; b = punkt.y; Język C umożliwia konstruowanie struktur zagnieżdżonych: struct rect{ struct point p1; struct point p2; } W takich strukturach dostęp do składowych podstawowych wykonuje się przy pomocy operacji: struct rect ekran; a1 = ekran.p1.x b1 = ekran.p1.y; Podobnie jak w przypadku zmiennych podstawowych, możemy posługiwać się tablicami struktur. Jest to często spotykane przy tworzeniu rekordów, które mają być zapisane do pliku. Można więc stworzyć tablicę struktur rect: struct rect{ struct point p1; struct point p2; } okno[5]; Każdy element tablicy jest strukturą. Powyższy zapis można zapisać inaczej: struct rect okno[5]; Inicjowanie tablicy struktur przeprowadza się podobnie jak dla pojedynczych struktur, po definicji podaje się ujętą w nawiasy klamrowe listę wartości początkowych: struct point { int x; int y; } punkt[ ] = { 0,0, 1,1, 1.5, 16,8 } Precyzyjniej byłoby ująć wszystkie elementy wierszy tablicy w nawias {}np.: {1,2}, {1.4}, {1,5}, ........ ale gdy podano wszystkie wartości i gdy wartościami są proste stałe lub napisy, wówczas wewnętrzne nawiasy można pominąć. Jak w przypadku normalnych tablic, gdy pominięto wymiar i podano listę wartości początkowych, to liczba elementów tablic struktur zostaje wyliczona automatycznie. Podczas omawiania wskazników powiedzieliśmy, że można je tworzyć do większości typów podstawowych i pochodnych (złożonych). Pora wię teraz na omówienie wskazników do struktur. Są one tak powszchne, że do języka włączono specjalny operator (strzałkę), mający postać: ->. Użycie tego operatora przedstawimy na przykładzie struktury dane: struct dane{ int klucz; int tabllica[200]; }dane_dos Deklarujemy wskażnik wsk_str do zmiennej dane_dos: struct dane *dane_dos; inicjujemy go zmienna dane_dos: wsk_str = &dane_dos; Od tego czasu do pól struktury można odwoływać sie poprzez wskaznik w następujący sposób: wsk_str->klucz = 1; // ekwiwalent dane_dos .klucz = 1; Zwróćmy uwagę, że nie stosujemy * do odwoływania się do wartości elementu składowego struktury wskazanej przez wskaznik wsk_str. Powodem wprowadzenia operatora -> do obsługi stuktur jest fakt, że przez operatory * i & nie uzyskamy dostępu do poszczególnych elementów struktury.Nie ma więc czegoś takiego jak: *wsk_str.klucz; Unie 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 uni. Deklaracja unii podobna jest do deklaracji
[ Pobierz całość w formacie PDF ] zanotowane.pldoc.pisz.plpdf.pisz.plgrolux.keep.pl
|