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 ZAKRESY WAŻNOŚCI
Właściwie to temat ten mógł zostać poruszony przy omawianiu zmiennych ale nie chciałem wprowadzać dodatkowego zamieszania.
Co to właściwie są te "zakresy ważności" ?
Do określania zakresów ważności służą nawiasy { oraz }, np tworzymy sobie pętlę: for (i_zmienna=0 ; i_zmienna != 10 ; i_zmienna++) { } Wszystko co znajduje się między nawiasami { oraz } należy tylko i wyłącznie do instrukcji for[...] dokładniej mówiąc jest w jej zakresie ważności. Powyższy przykład odnosił się do instrukcji for ale parę nawiasów { oraz } stosowaliśmy także w innych przypadkach np. przy instrukcjach warunkowych if, wszystko co było objęte nawiasami odnosiło się do konkretnego if'a. Ostatnio poznaliśmy także konstrukcje zwane funkcjami, tam też olbrzymie znaczenie odgrywają nawiasy { oraz } oznaczając odpowiednio początek oraz koniec ciała funkcji. No tak sporo tego jest ale tak naprawdę to nadal nie wiemy tak konkretniej co to są te zakresy ważności. Najlepiej posłużyć się przykładem: Tu wszystko jest jasne, tworzymy 3 zmienne, następnie sumujemy zmienne A i B a wynik zapisujemy w C. Umieśćmy linijkę int i_zmiennaC = 0; w nawiasach { oraz } i spróbujmy uruchomić program. Wywaliło nam błąd w całkiem nieoczekiwanym miejscu, no i w ogóle skąd ten błąd skoro niby wszystko jest w porządku? Sprawę wyjaśniają oczywiście dodane nawiasy { i }, dodanie tych nawiasów spowodowało to, że zmienna C została utworzona w innym zakresie ważności. Wyjaśnieniem tego jest fakt, że zmienna tworzona w jednym zakresie ważności nie jest "widoczna" w wyższym zakresie ważności. Zerknij na poniższy przykład: Zmienna A jest widziana wszędzie tzn w zakresie głównym programu oraz zakresach utworzonych dla zmiennych B i C, zmienna B jest widziana we własnym zakresie oraz w zakresie o stopień niższym utworzonym dla zmiennej C, zmienna C jest widziana we własnym zakresie i nigdzie indziej. Jeśli przyjrzymy się dokładniej przykładowi to zauważymy, że w programie są tworzone dwie zmienne o identycznej nazwie i_zmiennaC, jak to jest możliwe? Program rozpatrujemy od góry do dołu: najpierw tworzona jest zmienna A następnie zmienna B, później zmienna C, później kończy się zakres ważności zmiennej C, więc zmienna "znika" dostępne są tylko zmienne A i B później kończy się zakres ważności zmiennej B, więc dostępna jest tylko zmienna A, następnie tworzona jest zmienna C (C') bo czemu by nie skoro wcześniej utworzona zmienna C już nie istnieje? :) Być może na chwilę obecną mechanizm ten nie wydaje się być istotny, ale warto o nim wiedzieć aby w przyszłości gdy zajdzie taka potrzeba można go było zastosować w naszych programach. Wspomniane zostały zakresy ważności zmiennych w funkcji a co jeśli chcielibyśmy aby niektóre nasze zmienne były dostępne także w innych funkcjach, takich które sobie dopiero utworzymy? Oczywiście rozwiązaniem jest przesyłanie do funkcji zawartości zmiennych jako parametr wywołania funkcji, ale czasem może się okazać, że jednak ten sposób nie wystarczy. Tu z pomocą przychodzą nam tzw. zmienne globalne. Zmienna globalna to zwykła zmienna tyle tylko, że tworzona jest ona poza wszelkimi obszarami ważności (jest ważna nadrzędnie). Tak utworzona zmienna jest dostępna wszędzie w naszym programie, i w funkcji głównej main i w dodatkowych nowo tworzonych funkcjach (oczywiście przy założeniu że są one wpisywane-tworzone poniżej miejsca w którym utworzono zmienną globalną). Często przypisaniu czy to przy pętlach czy też instrukcjach warunkowych zdarza nam się zapomnieć nawiasu zamykającego zakres ważności czyli } , oczywiście przy krótkich programach problem można szybko zlokalizować niestety wraz z rozrastaniem się naszego programu będzie to coraz trudniejsze. Najlepszy sposobem uniknięcia tego typu pułapek, jest pisanie w sposób następujący np: if (?warunek?) //rozpoczynam instrukcję warunkową { //wpisuję nawias rozpoczynający treść instrukcji warunkowej // robię linijkę lub dwie odstępu } // zamykam nawias instrukcji warunkowej dopiero gdy powyższe mam wpisane cofam się do miejsca pomiędzy nawiasami { i } gdzie zostawiłem wolne miejsce i rozpoczynam wpisywanie treści instrukcji warunkowej. Strasznie wydają się być skomplikowane relacje pomiędzy zakresami ważności, ale praktyka pokazuje, że ten mechanizm jest dobrze przemyślany i dosyć skuteczny przy rozwiązywaniu wielu problemów. Może teraz sprawiać trochę kłopotu zrozumienie tego ale jeśli trochę poćwiczymy to wszystko stanie się jaśniejsze. 1. Utwórz 3 zmienne tego samego typu o identycznej nazwie i przypisz im różne wartości (np 1,2,3) 2. Utwórz zmienną globalną 3. Dodaj wartości ze zmiennych lokalnych utworzonych w punkcie 1, do zmiennej globalnej utworzonej w punkcie 2. |
|