w12, Studia PK, JiPP, Wykłady - Chmaj
[ Pobierz całość w formacie PDF ]
//-->Struktury•tablica – przykład obiektu grupującego wieleobiektów składowych pod jedną nazwą;ograniczenie – wszystkie składowe tego samegotypu•potrzeba struktury danych grupującej zmienneróŜnego typu (np. dane opisujące pracownika)•struktura – obiekt złoŜony z jednej lub kilkuzmiennych (dopuszczalnie róŜnych typów)zgromadzonych razem i występujących podwspólną nazwą•formy definicji strukturostruct {char imie[24];char nazwisko[32];int rok;} o1,o2;- definiuje dwa „egzemplarze” struktury. Gdy chcemyzdefiniować trzeci – musimy powtórzyć całą definicjęostruct osoba {char imie[24];char nazwisko[32];int rok;} o1,o2;-zawiera nazwę struktury (etykietę) – pozwala to nadefinicję dodatkowych „egzemplarzy”struct osoba o3, o4;otypedef struct osoba {char imie[24];char nazwisko[32];int rok;} OSOBA;OSOBA o1,o2,o3,o4;przez typedef definiujemy typ OSOBA, który potemwykorzystujemy do definicji kolejnych „wcieleń” struktury•inicjalizacja struktury – moŜliwa w trakcie definicjiOSOBA o1={”James”,”Bond”,1965);•odwołanie do poszczególnych składowych (pól)struktury – uŜycie operatora ”.” składowej strukturyo1.imie/* odwołanie do pola imie */o1.nazwisko /* odwołanie do pola nazwisko */o1.rok/* odwołanie do pola rok */nazwa pola jest nazwą lokalną widoczną tylko wewnątrzstruktury•dozwolone operacje na strukturachoprzypisanie jej innej struktury jako całościokopiowanie jej w całości na inną strukturę (w tym –przesyłanie argumentów funkcjom i zwracanie przezfunkcje wartości)oinicjalizacja w trakcie definicjiopobieranie adresu struktury przez operator &oodwołanie się do składowych struktury•niedozwolone jest porównywanie strukturPrzykład – ilustracja uŜycia struktur:#include <iostream>#include <cstring>#include <cstdlib>using namespace std;typedef struct {char imie[24];char nazwisko[32];int rok;} OSOBA;OSOBA utworz(char *imie, char *nazwisko, int rok){OSOBA temp;strcpy(temp.imie,imie);strcpy(temp.nazwisko,nazwisko);temp.rok=rok;return temp;}void wypisz(OSOBA kto){cout << "Imie: " << kto.imie << endl;cout << "Nazwisko : " << kto.nazwisko << endl;cout << "Rok urodz.: " << kto.rok << endl;}main(){OSOBA o1={"Jan","Nowak",1983}; /* inicjalizacja */OSOBA o2;wypisz(o1);o2=o1;/* przypisanie struktury *//* porownanie struktur - nielegalneif (o1==o2) cout << "Struktury identyczne\n");*/wypisz(o2);wypisz(utworz("John","Lennon",1940));}Imie: JanNazwisko : NowakRok urodz.: 1983Imie:Nazwisko :Rok urodz.:JohnLennon1940•zagnieŜdŜanie struktur – wcześniej zdefiniowane strukturymogą być uŜyte do definicji nowychstruct punkt {int x;int y;}struct prosto {struct punkt p1;struct punkt p2;}struct punkt d,g;struct prosto ekran;odwołanie do pól takiej struktury:ekran.p1ekran.p1.x/* dolny lewy punkt ekranu *//* współrzędna x dolnego lewego punktuekranu */•struktury jako argumenty funkcjiostruktury mogą być argumentami funkcji oraz mogą byćzwracane przez funkcjeosą przekazywane do funkcji poprzez wartość (jakwszystkie inne zmienne) – na stosie tworzona jest kopiastruktury, którą funkcja manipuluje bez zmiany oryginału#include <iostream>using namespace std;struct punkt {int x;int y;};struct prosto {struct punkt p1;struct punkt p2;};struct punkt rob_punkt(int x, int y){struct punkt temp;temp.x=x;temp.y=y;return temp;};struct prosto rob_prosto(struct punkt p1, struct punkt p2){struct prosto temp;temp.p1=p1;temp.p2=p2;return temp;};void wypisz_rozmiar(struct prosto pp){cout << "Ekran ma rozmiary: " << pp.p2.x-pp.p1.x << ”na ”<< pp.p2.y-pp.p1.y << pikseli.\n",}struct punkt dodaj_punkty(struct punkt p1, struct punkt p2){p1.x += p2.x;p1.y += p2.y;return p1;}main(){struct punkt d, m, g;struct prosto ekran;d=rob_punkt(10,10);m=rob_punkt(320,200);g=dodaj_punkty(d,m);printf("Punkt d: (%3d, %3d)\n",d.x,d.y);printf("Punkt m: (%3d, %3d)\n",m.x,m.y);printf("Punkt g: (%3d, %3d)\n",g.x,g.y);ekran=rob_prosto(d,g);wypisz_rozmiar(ekran);}PunktPunktPunktEkrand:m:g:ma( 10, 10)(320, 200)(330, 310)rozmiary: 320 na 200 pikseli. [ Pobierz całość w formacie PDF ] |