• Nie Znaleziono Wyników

Dynamiczne alokowanie struktur Wykład: 2

N/A
N/A
Protected

Academic year: 2021

Share "Dynamiczne alokowanie struktur Wykład: 2"

Copied!
29
0
0

Pełen tekst

(1)

Wykład: 2

Struktury, unie,

Dynamiczne alokowanie struktur

Programowanie obiektowe

(2)

Czyszczenie bufora

strumienia wejściowego

Czyli drobna, ale przydatna wskazówka, jeżeli chcemy wczytywać naprzemiennie liczby za pomocą cin i łańcuchy za

pomocą getline()

(3)

Bufor strumienia cin

Struktury i unie

W tej wersji program działa poprawnie.

Po wczytaniu liczby, w buforze strumienia wejściowego cin zostaje znak końca wiersza. Jest on przechwytywany przez getline() – czyli do getline() „wrzucany”

jest od razu enter – użytkownik nie ma szans nic wpisać. Zmienna s zawiera więc łańcuch pusty.

Po zamianie kolejności poleceń cin

i getline program działa błędnie.

(4)

Bufor strumienia cin

cin.clear powoduje usunięcie flagi błędu ale w buforze wejściowym nadal jest znak końca wiersza. Flaga błędu pojawi się gdy podamy nieprawidłowy typ danych (np.

zapiszemy łańcuch znaków w zmiennej int)

cin.ignore() – spowoduje zignorowanie znaków w buforze.

(5)

Bufor strumienia cin

Struktury i unie

Druga - prosta, ale nieco mniej elegancka metoda – po wyczyszczeniu flagi błędów wczytujemy zawartość bufora (np. znak końca wiersza) do tymczasowej zmiennej (w tym przykładzie „kosz”).

Zawartość tej zmiennej nas nie interesuje, ale bufor strumienia wejścia zostanie w ten

sposób wyczyszczony.

(6)

Bufor strumienia cin

Przykład: wykorzystanie powyższej metody do kontroli poprawności danych.

(7)

Struktury

Programowanie obiektowe

(8)

Struktury

Struktury to złożone typy danych pozwalające przechowywać dane różnego typu w jednym obiekcie.

 Za pomocą struktur możliwe jest grupowanie wielu zmiennych o różnych typach.

 Za pomocą struktur można w prosty sposób organizować zbiory danych, bez konieczności korzystania z tablic.

Struktura nazywana jest też rekordem (szczególnie w odniesieniu

do baz danych).

(9)

Deklaracja struktury w C++

Struktury i unie

Struktury tworzymy słowem kluczowym struct.

1. podajemy nazwę typu,

2. w nawiasie klamrowym definiujemy elementy składowe

Uwaga!

Tak opisana struktura nie jest jeszcze

egzemplarzem zmiennej a dopiero definicją

nowego typu zmiennej złożonej.

(10)

Deklaracja struktury w C++

Przykład – struktura zawierająca rekord prostej bazy danych:

Definiujemy dwie zmienne opisanego wyżej typu o nazwach „pracownik1” i

„pracownik2”

Opisujemy typ strukturalny o nazwie „osoba”

Druga metoda:

(11)

Inicjalizacja struktury

Struktury i unie

Struktury można inicjalizować już w chwili ich tworzenia.

Lub też krócej:

(12)

Zapis i odczyt danych struktury

Zapis do pól struktury:

(13)

Zapis i odczyt danych struktury

Struktury i unie

Odczyt z pól struktury:

(14)

Struktury globalne i lokalne

 Struktura stworzona przed funkcją main() będzie strukturą globalną, (każdy podprogram będzie mógł z niej korzystać).

 Struktura stworzona wewnątrz jakiegoś bloku, będzie lokalną i widoczna

tylko w tym miejscu.

(15)

Tablice struktur

Struktury i unie

Tablicę struktur tworzymy i dowołujemy się do niej w ten sam sposób co do zwykłych tablic prostych zmiennych.

nazwa_struktury nazwa_tablicy [liczba_elementów];

Tablice możemy tworzyć też bezpośrednio po deklaracji i definicji struktury:

(16)

Tablice struktur

(17)

Zagnieżdżenie struktur

Struktury i unie

Zagnieżdżanie struktur polega na deklarowaniu pól jednej struktury jako typ strukturalny innej struktury.

 Struktury można zagnieżdżać wielokrotnie

 Wiele typów strukturalnych używać można jednocześnie jako pól

jednej struktury,

(18)

Zagnieżdżenie struktur

 Do pól zagnieżdżonych struktur odwołujemy wykorzystując

wielokrotnie operator "."

(19)

Struktury jako wartość funkcji

Struktury i unie

Funkcja może zwracać zmienną typu strukturalnego.

Możemy więc zapakować do niej

kilka zmiennych typu prostego

(20)

Dynamiczne alokowanie

struktur

(21)

Dynamiczna alokacja struktur

Struktury i unie

Obsługując strukturę stworzoną statycznie używamy operatora „ .”

ktos.nazwisko = „Jan”;

Obsługując strukturę stworzoną dynamicznie (za pomocą new) używamy operatora „ ->”

ktos->nazwisko = „Jan”;

(22)

Dynamiczna alokacja struktur struktur utworzonych

dynamicznie

(23)

Unie

Programowanie obiektowe

(24)

Unie

Unia typem definiowanym przez użytkownika.

Od struktur różni ją to że swoje składniki zapisuje w tym samym (współdzielonym) obszarze pamięci.

Oznacza to, że w danej chwili, unia może przechowywać wartość

wyłącznie jednej ze swoich zmiennych składowych

(25)

Unie

Struktury i unie

double Int

short int

Jeżeli unia zawiera np. obiekt typu int i double, gdy aktualnie korzystamy z double (8B) to po odczytaniu wartości int(4B) bez uprzedniego zapisu do niej pokażą nam się zwykłe śmieci.

- jednocześnie używamy tylko jednego obiektu.

(26)

Unie

(27)

Unie

Struktury i unie

(28)

Unie

Unie mogą być składowymi innych obiektów takich jak struktur czy

klas

(29)

Literatura:

W prezentacji wykorzystano przykłady i fragmenty:

• Grębosz J. : Symfonia C++, Programowanie w języku C++

orientowane obiektowo, Wydawnictwo Edition 2000.

• Jakubczyk K.: Turbo Pascal i Borland C++ Przykłady, Helion.

Warto zajrzeć także do:

• Sokół R. : Microsoft Visual Studio 2012 Programowanie w Ci C++, Helion.

• Kerninghan B. W., Ritchie D. M.: język ANSI C, Wydawnictwo Naukowo Techniczne.

Dla bardziej zaawansowanych:

• Grębosz J. : Pasja C++, Wydawnictwo Edition 2000.

• Meyers S.: język C++ bardziej efektywnie, Wydawnictwo Naukowo

Techniczne

Cytaty

Powiązane dokumenty

warunki początkowe: wynik funkcji Pusta po podstawieniu wartości ile jest równy 0, ile jest numerem ostatniego elementu wstawionego do listy, zrob jest typem funkcji, która

jeśli to nie jest ostatni element listy (Nast->Nastepny != NULL) i jeśli jeszcze można odszukać element równy kluczowi (strcmp(Nast->Dane.Nazwisko, Klucz) < 0)

Obiekt typu stos zawiera wskaźnik poczatek wskazujący na dynamiczny obiekt typu wezel zawierający dwa wskaźniki: elem wskazujący na obiekty z danymi,

Kryształy kowalencyjne charakteryzują się występowaniem wiązania kowalencyjnego pomiędzy wszystkimi atomami tworzącymi sieć krystaliczną.. Kryształ kowalencyjny

{działanie: usuwa elementy ze stosu i inicjuje stos jako pusty warunki początkowe: Poczatek jest zainicjowanym stosem warunki końcowe: liczba elementów na stosie jest równa 0}.

Startujemy od mało efektywnego (naiwnego) algorytmu i konstruujemy algorytm efektywniejszy.. Transformacyjna

Idea algorytmu Kruskala: z posortowanej niemalejąco wg wag listy krawędzi – dołączane są kolejne, jeśli nie tworzą cyklu (algorytm zachłanny).. Algorytmy grafowe: minimalne

są równoważne w tym sensie, że jeśli dany problem jest rozwiązywany przez jeden model w czasie ograniczonym od góry przez wielomian zależny od rozmiarów problemu, to przy