do koszyka |
do koszyka |
do koszyka |
do koszyka |
do koszyka |
do koszyka |
do koszyka |
do koszyka |
do koszyka |
KURS JĘZYKA C++ PODSTAWY
00. Informacje ogólne - wstęp 01. Praca z konsolą - początki - cout 02. Zmienne (int, float, double) 03. Konsola cd. - cin 04. Zmienne tekstowe - (char, string) 05. Operatory 06. Instrukcje warunkowe (if - else, switch - case) 07. Pętle (for, while) 08. Instrukcje warunkowe cd. 09. Break, Continue 10. Funkcje 11. Zakresy ważności 12. Tablice zmiennych 13. Mała powtórka :))) 14. Struct - struktury 15. String, Vector - wstęp do STL 16. Wskaźniki, referencje 16a. Wskaźnik do typów prostych 16b. Wskaźnik do funkcji 16c. Operatory new i delete 16d. Referencje 17. Pliki źródłowe i nagłówkowe Zadania powtórzeniowe 18. Class - klasy 19. Konstruktor , destruktor 20. Argumenty domyślne, przeciążanie (przeładowanie) funkcji i operatorów C++ FAQ: 01. Operacje na plikach, odczyt/zapis02. Nie działa mi polecenie gotoxy() co robić ? 03. Jaki podręcznik do nauki C++ ? ostatnia aktualizacja: 29.08.2005 STRUCT - STRUKTURY
Dzisiaj struktury (struct) - pierwszy drobny krok w stronę programowania obiektowego :)
Na chwilę obecną poznaliśmy kilka głównych typów zmiennych takie jak: int, float, double, char, string. Typy te są typami podstawowymi - prostymi, w wielu przypadkach są one wystarczające lecz czasem zaistnieje potrzeba utworzenia "czegoś" bardziej rozbudowanego i tu z pomocą przychodzi nam typ struct. Wyobraźmy sobie sytuację gdy chcemy napisać programik który ma za zadanie pobrać od nas: nazwisko, wiek i wagę. Sprawa wydaje się dosyć prosta, tworzymy 3 zmienne (string-nazwisko,int-wiek,float-waga) i po prostu przy pomocy cin wprowadzamy odpowiednie dane do zmiennych. Sprawa odrobinę się komplikuje gdy takich danych mamy pobrać np 10. Można utworzyć 30 zmiennych (10-string, 10-int, 10-float) i do tych zmiennych przypisać niezbędne dane, można także utworzyć 3 dziesięcio-elementowe tablice zmiennych ( string s_nazwisko[10], int i_wiek[10], float f_waga[10]) i do tak utworzonych tablic przypisywać nasze informacje. Na chwilę obecną ta ostatnia metoda wydaje się być najbardziej sensowna z wymienionych, daje nam najwięcej możliwości przy w miarę prostej obsłudze i na dodatek jeśli nagle nam się wymyśli, że nie będziemy wprowadzać 10 danych ale np 200 to w bardzo prosty sposób można zwiększyć bufory dla poszczególnych rodzajów danych bez przerabiania całego programu wymyślania setek nazw zmiennych itp. Teraz aby lepiej sobie wyobrazić problem przed przeczytaniem dalszej części przejdź do działu ćwiczenia (na samym końcu tekstu) i wykonaj ćwiczenie nr 1. Po jego wykonaniu kontynuuj czytanie. Mam nadzieję, że ćwiczenie nie sprawiło problemów. Powróćmy teraz do głównego tematu naszych zajęć czyli struktur. W czym właściwie mogą one nam pomóc skoro mamy tablice i zrobienie naszego przykładowego programiku z ich użyciem było dosyć wygodne? Odpowiedź na to pytanie myślę, że będzie już jasna pod koniec lektury tej lekcji. Definiowanie struktury: pojęcia definicji i deklaracji deklaracja to informacja o fakcie utworzenia jakiegoś "obiektu" np. int i_zm; - deklarujemy utworzenie zmiennej typu int o nazwie i_zm definicja to konkretne "użycie" naszego obiektu w programie, a dokładniej to scharakteryzowanie jego cech, np. i_zm = 5; podajemy konkretnie, że zmienna i_zm ma przyjąć wartość 5 zapis int i_zm = 5; jest równocześnie deklaracją i definicją, deklarujemy utworzenie zmiennej oraz "od razu" definiujemy jej wartość początkową Jak widać definiowanie struktury rozpoczynamy od słowa kluczowego struct następnie (po białym znaku - spacja, tabulator itp.) podajemy nazwę naszej tworzonej struktury. W kolejnym kroku wpisujemy nawiasy { oraz } oznaczające odpowiednio początek i koniec naszej struktury. Ostatnim krokiem jest wpisanie po nawiasie } znaku ; (średnik) który jest potwierdzeniem dla kompilatora, że to na pewno jest koniec naszej struktury. W początkowym etapie nauki dosyć często zdaża się zapominać o znaczku średnika na końcu ale jeśli zawsze będziemy zaczynali tworzenie nowej struktury wg powyższego schematu raczej nie powinno być problemów. Znam osoby które tworząc nową strukturę (klasę - co to jest zacznie się wyjaśniać już wkrótce) piszą w sposób następujący: struct, następne nazwa struktury, nawias otwierający, cała treść struktury, nawias zamykający, średnik. Wg mnie metoda ta to proszenie się o kłopoty :) ale co kto lubi ja zalecam tworzenie pustej struktury a dopiero po jej sprawdzeniu czy wszystko jest ok wypełnianie jej danymi. Gdzie tworzymy struktury? Właściwie panuje tu dosyć duża swoboda, w prostych przykładach można strukturę umieścić w dowolnym miejscu programu (np. w funkcji), w przykładach odrobinę bardziej rozbudowanych struktury tworzymy "na samej górze" tak jak w naszym przykładzie zaraz po dyrektywach include, w większych programach zazwyczaj struktury tworzone są w całkiem osobnych plikach. Nie ma tu jakichś specjalnych ograniczeń głównie chodzi o przejrzystość kodu programy, w trakcie pisania program się rozrasta czasem bardzo intensywnie więc pilnowanie "porządku" od samego początku pisania nie zaszkodzi. Na jasnym i przejrzystym tworzeniu kodu programu możemy TYLKO skorzystać, oczywiście może wydawać się to zbędną kosmetyką i stratą czasu bo ktoś powie "skoro ja to piszę to wiem co i gdzie piszę" - oczywiście jest to prawda... do pewnego momentu, jak na chwilę obecną cały kod naszych przykładów mieści się w jednym niezbyt rozbudowanym pliczku, ale co będzie na późniejszych etapach gdzie "poważne" programy składają się z wielu plików źródłowych (dziesiątki plików to norma) a każdy z tych plików będzie zawierał dziesiątki a może setki linii kodu? Nie czarujmy się nikt nie jest w stanie spamiętać wszystkiego. Staram się Was na to uczulić, bo w przyszłości może to Wam zaoszczędzić naprawdę wielu kłopotów. Co to właściwie jest ta struktura, tyle mieszania a jeszcze żadnych konkretnych korzyści z jej stosowania nie widać. Poznaliśmy już tablice, tablica jest to zbiór elementów jednego typu np tablica elementów typu int (int i_tabl[20]), natomiast struktury są zbiorem elementów różnych typów. Na poniższym rysunku wypełniłem naszą strukturę konkretną treścią. W strukturze umieściłem przykładowo 3 zmienne różnych typów, jak widać struktura jest takim "workiem" do którego można sobie "wrzucić" zmienne struktura (struct) jest typem złożonym zawierającym w sobie inne typy. Mamy już zdefiniowaną naszą strukturę najwyższy czas utworzyć jej element i zacząć z nim pracę. Obiekt struktury umieszczamy w naszym programie dokładnie tak samo jak inne zmienne, po prostu podajemy nazwę struktury (w naszym przypadku moja_struktura) a następnie nazwę pod jaką będzie ona dostępna dla nas (ms_nowka - ms skrot od moja_struktura, nowka - bo nowa :)) ). Zauważmy, że wszystko przebiegło dokładnie tak samo jak w przypadku tworzenia np zmiennej typu int podawaliśmy jaki typ zmiennej chcemy użyć a następnie jego nazwę. Od tego momentu mamy w naszym programie dostępną nową "zmienną" o nazwie ms_nowka. Przy typach prostych dostęp do zmiennych był prosty korzystaliśmy z np. operatora przypisania "=" i ładowaliśmy do zmiennej jakąś konkretną daną np. i_zm = 4; przy strukturach sprawa jest odrobinę bardziej skomplikowana, bo zawierają one w sobie zazwyczaj więcej danych niż typ int ale nie załamujmy się dostęp do danych "zamkniętych" w strukturze jest dosyć intuicyjnie rozwiązany więc łatwo przyswajalny. Do poszczególnych elementów zawartych w strukturze odwołujemy się przy pomocy operatora "." (kropka): Jak widać nie jest tak strasznie :), jeden obiekt mamy utworzony i już wiemy jak go "obsługiwać", właściwie wszystko sprowadza się do kropki (:) ), reszta operatorów ma podobne znaczenie jak przy zwykłych zmiennych. Utwórzmy teraz tablicę obiektów naszej struktury: Jak widać wszytko przebiega dokładnie jak w przypadku "zwykłych" zmiennych. A co z dostępem do obiektów w tak utworzonej tablicy? No i nadal wszystko "po staremu" tyle tylko, że przydaje nam się kropka :), wszystko jak przy tablicach zwykłych zmiennych podajemy do jakiej tablicy się odwołujemy, następnie do którego elementu tablicy ([?]), potem kropeczka, i ostatecznie nazwa elementu. Poniżej kilka przykładów operacji które już powinny być w tym momencie raczej oczywiste. ms_tablica[3].i_LiczbaCalkowita = 5; ms_tablica[5].i_LiczbaCalkowita = 3; ms_tablica[1].i_LiczbaCalkowita = ms_tablica[3].i_LiczbaCalkowita; ms_tablica[2].i_LiczbaCalkowita = ms_tablica[3].i_LiczbaCalkowita + ms_tablica[5].i_LiczbaCalkowita; int i_testowa; i_testowa = ms_tablica[5].i_LiczbaCalkowita; Niektóre z zapisów mogą się wydawać długie i przez to lekko "odstraszać" od ich stosowania, nic bardziej błędnego! Dobrze przemyslane nazwy struktur i nazwy zmiennych wybitnie wpływają na szybkie zorientowanie się w programie nawet po dłuższej przerwie. Wstępnie zostały omówione niektóre możliwości struktur, temat oczywiście będzie kontynuowany. 1. Napisz programik który poprosi Cię o wprowadzenie danych 10 osób, nazwisko i wiek wystarczą. Następnie wyświetl na ekranie wprowadzone dane (nazwisko obok wiek) i policz średnią wieku wszystkich wprowadzonych do programu osób - wyświetl średnią. 2. Napisz programik z przykładu 1 tyle tylko, że wszystkie dane przechowuj w tablicy struktur. Przemyśl główne różnice między przykładem 1 i 2 - zastanów się jakie nowe możliwości otwiera przed tobą zastosowanie struktur. |
|