Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałWisia Siemianowski Został zmieniony 10 lat temu
1
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka
2
Mechanizm obsługi sytuacji wyjątkowych wykorzystuje się, gdy wiemy, że program nie będzie w stanie wykonać poprawnych obliczeń. W takiej sytuacji rzucamy wyjątek, czyli przerywamy obliczenia i przeskakujemy do procedury obsługi wyjątku.
3
Mechanizm obsługi sytuacji wyjątkowych 1.Określenie, gdzie zaczyna się obszar, w którym może wystąpić sytuacja wyjątkowa. try – spróbuj 2.Gdy zaistnieje sytuacja wyjątkowa rzucenie wyjątku. throw – rzuć 3.Określenie reakcji na wystąpienie sytuacji. catch – złap
4
try { //tu coś może się nie udać throw 1;//coś się nie udało } catch(int) { //reakcja na sytuację wyjątkową }
5
Co może być sytuacją wyjątkową? O tym decyduje programista. Sytuacją wyjątkową może być wszystko, co my wewnątrz programu za taką uznamy.
6
Kiedy stosować mechanizm obsługi sytuacji wyjątkowych? Gdy dwa odmienne fragmenty kodu muszą ze sobą współpracować: jeden potrafi wykryć sytuację wyjątkową, ale nie potrafi nic na nią poradzić, drugi wie, co zrobić, ale nie potrafi jej wykryć.
7
double suma(string nazwa) { ifstream plik(nazwa.c_str()); if (plik.good()) { int s=0, li; while (!plik.eof()) { plik>>li; s+=li; } return s; } else { //return ?? }
8
double suma(string nazwa) { ifstream plik(nazwa.c_str()); if (!plik.good()) throw 1; int s=0, li; while (!plik.eof()) { plik>>li; s+=li; } return s; } int main() { string nazwa="dane.txt"; double s; for(;;) { try { s=suma(nazwa); break; } catch (int) { cout<<"Podaj nazwe pliku\n"; cin>>nazwa; } cout<<s<<endl; return 0; }
9
throw vs return Mechanizm obsługi sytuacji wyjątkowych umożliwia powrót z funkcji inny niż za pomocą instrukcji return. Różnica w obiektach zwracanych: argumentem return musi być obiekt określonego typu, argumentem throw może być obiekt dowolnego typu. Różnica w przeniesieniu sterowania: instrukcja return powoduje powrót do miejsca wywołania funkcji, instrukcja throw powoduje przejście do procedury obsługi sytuacji wyjątkowej – odpowiedni blok catch.
10
Po zakończeniu procedury obsługi wyjątku nie następuje żaden powrót do miejsca skąd rzucono wyjątek. Po zakończeniu wykonywania bloku catch zaczyna się wykonywanie instrukcji znajdujących się po wszystkich blokach catch.
11
Kolejność bloków catch ma znaczenie (analogicznie jak w przypadku else if). try { throw 1; } catch(int){cout<<"int"<<endl;} catch(double){cout<<"double"<<endl;} catch(char){cout<<"char"<<endl;}
12
Który blok catch wybiera kompilator? Pierwszy pasujący, czyli: rzucamyoczekujemy T->T T->const T T->T & T*->void*obiekt klasy-> klasy podstawowej pochodnej
13
void f(int a){cout<<"int\n";} void f(...){cout<<"...\n";} int main() { f(1.0); return 0; } int main() { try { throw 1.0; } catch(int){cout<<"int\n";} catch(...){cout<<"...\n";} return 0; } int …
14
try { throw 1; } catch(...){cout<<"int\n";} catch(int){cout<<"...\n";} BŁĄD
15
Zagnieżdżanie bloków try try { try { throw 1; } catch (long){cout<<"long\n";} catch (int){cout<<"int\n";} } catch(int){cout<<"int\n";} catch(double){cout<<"double\n";} int
16
try { try { throw 1; } catch (long){cout<<"long\n";} catch (char){cout<<"char\n";} catch (...){cout<<"...\n";} } catch(int){cout<<"int\n";} catch(double){cout<<"double\n";} …
17
Re-throw try { try { throw 1; } catch (long){cout<<"long\n";} catch (char){cout<<"char\n";} catch (...){cout<<"...\n";throw;} } catch(int){cout<<"int\n";} catch(double){cout<<"double\n";} int …
18
Można sprawdzać jaką wartość ma rzucony obiekt. try { throw 1; } catch(int a){cout<<"int = "<<a<<endl;} int = 1
19
W przypadku bloków try i catch obowiązują normalne zakresy ważności. try { int a=2; throw a; } catch(int) { cout<<"int = "<<a<<endl; } BŁĄD
20
Funkcja exit Deklaracja: void exit(int status); Jest to funkcja, która kończy działanie programu, ale wcześniej zamyka wszystkie pliki oraz opróżnia wszystkie bufory.
21
Funkcja abort Deklaracja: void abort(); Jest to funkcja, która kończy działanie programu (brutalnie).
22
Funkcja terminate Deklaracja: void terminate(); Jest to funkcja wywoływana przez kompilator w chwili, gdy żaden z bloków catch nie złapie wyjątku. Funkcja ta wywołuje funkcję abort.
23
Funkcja set_terminate Deklaracja: (void (*wsk)()) set_terminate(void (*wsk)()); Jest to funkcja, która mówi kompilatorowi, jaką funkcję ma wywołać z funkcji terminate.
24
void nie_zlapano() { cout<<"Nie zlapano wyjatku\n"; exit(0); } int main() { set_terminate(nie_zlapano); try { throw 1; } catch(double) {cout<<"double\n";} } Nie zlapano wyjatku
25
int main() { set_terminate(nie_zlapano); try { throw 1; } catch(int) { cout<<"int\n"; try { throw 1.0; } catch (int){cout<<"int\n";} } catch(double){cout<<"double\n";} catch(char){cout<<"char\n";} } int Nie zlapano wyjatku
26
Deklarując funkcję możemy podać jakie wyjątki funkcja może rzucać, np.: void fun();funkcja rzuca dowolny wyjątek void fun() throw (int, double);funkcja rzuca int albo double void fun() throw();funkjca nie rzuca żadnych wyjątków
27
Funkcja unexpected Deklaracja: void unexpected(); Jest to funkcja wywoływana przez kompilator w chwili, gdy z wnętrza funkcji zostanie rzucony nieoczekiwany wyjątek. Funkcja ta wywołuje funkcję terminate.
28
Funkcja set_unexpected Deklaracja: (void (*wsk)()) set_unexpected(void (*wsk)()); Jest to funkcja, która mówi kompilatorowi, jaką funkcję ma wywołać gdy rzucony zostanie wyjątek niespodziewany.
29
void fun() throw(int) { throw 1.0; } void niespodziewany() { cout<<"Wystapil niespodziewany wyjatek"; exit(0); } int main() { set_unexpected(niespodziewany); try { fun(); } catch(int) { cout<<"int\n"; } return 0; }
30
goto for(;;){ goto koniec; } koniec:
31
throw try{ for(;;){ throw 1; } catch (int){}
32
Wyjątki standardowe można znaleźć w Thinking in C++ tom II Bruce Eckel Dostępne http://helion.pl/online/thinking/index.html
33
1.Zmienne: 1.deklaracja (extern), 2.definicja, 3.inicjalizacja, 4.nazwy zmiennych. 2.Stałe: 1.będące liczbami całkowitymi (hex, oct, dec) 2.będące liczbami zmiennoprzecinkowymi, 3.znakowe (znaki specjalne), 4.tablice znakowe – C-stringi.
34
3.Instrukcje sterujące: 1.blok instrukcji 2.if 3.if…else 4.switch (ograniczenia) 5.while 6.do…while 7.for 8.break 9.continue 10.goto (inne sposoby wyjścia z zagnieżdżonej pętli)
35
4.Typy: 1.fundamentalne 2.złożone [] () * & 3.wbudowane 4.definiowane przez użytkownika 5.typ void 5.Czas życia obiektu, zakres ważności, zasłanianie nazw. 6.Specyfikatory: 1.const 2.register 3.volatile 4.static
36
7.Typ wyliczeniowy enum, instrukcja typedef 8.Operatory: 1.arytmetyczne jedno- i dwuargumentowe, 2.przypisania, 3.logiczne, 4.bitowe, 5.wyrażenie warunkowe, 6.operator przecinek, 9.Priorytety i łączność operatorów.
37
10.Funkcje: 1.deklaracja, definicja, wywołanie, 2.zwracanie wartości, 3.argumenty formalne i aktualne, 4.przesyłanie argumentów przez wartość i przez referencję, 5.argumenty domniemane, 6.funkcja inline, 7.zmienne lokalne statyczne.
38
11.Preprocesor: 1.define 2.undef 3.makrodefinicja 4.kompilacja warunkowa 5.include 6.ifndef 7.nazwy predefiniowane: 1.__FILE__ 2.__LINE__ 3.__DATA__ 4.__TIME__
39
12.Tablice: 1.definicja, inicjalizacja, 2.odwołania do elementów tablicy, 3.stałe tablice, 4.tablice znakowe, 5.tablice wielowymiarowe, 6.przekazywanie tablic do funkcji.
40
13.Wskaźniki: 1.wskaźniki do pojedynczych obiektów i tablic, 2.wskaźnik jako argument funkcji, 3.wskaźnik do funkcji, 4.wskaźnik do funkcji jako argument innej funkcji, 5.arytmetyka wskaźników, 6.stałe wskaźniki, wskaźniki do stałych, stałe wskaźniki do stałych, 7.dynamiczne tworzenie tablic, usuwanie tablic, 8.wskaźnik do tablicy wielowymiarowej, 9.funkcja zwracająca tablicę (wskaźnik) jedno- i wielowymiarową.
41
14.Operatory rzutowania. 15.Argumenty z linii poleceń (argumenty funkcji main). 16.Przeładowanie nazw funkcji: 1.lista argumentów przy przeładowaniu, czyli kiedy dwie funkcje o tej samej nazwie mogą współistnieć w tym samym zakresie ważności (błędy w momencie definiowania funkcji oraz błędy w momencie wywołania funkcji), 2.wskaźnik do funkcji przeładowanej,
42
3.konwersje przy dopasowaniu argumentów aktualnych do argumentów formalnych 1.dopasowanie dokładne (z trywialną konwersją), 2.dopasowanie z awansem, 3.dopasowanie za pomocą konwersji standardowych, 4.dopasowanie za pomocą konwersji zdefiniowanych przez użytkownika, 5.dopasowanie do funkcji z wielokropkiem.
43
17.Szablony funkcji: 1.definiowanie, 2.parametr szablonu, argument funkcji, 3.funkcja specjalizowana, 4.obiekty lokalne, typy pochodne, obiekty lokalne statyczne, 5.funkcje inline, 6.Run-Time Type Identyfication.
44
18.Struktury: 1.definicja i rozmiar struktury, 2.obiekty strukturalne, wskaźniki do nich, inicjalizacji obiektów strukturalnych, 3.odwoływanie się do składników struktury, 4.pola bitowe, unie – zastosowanie do konwersji danych, 5.metody składowe struktury, 6.wskaźnik this 7.struktury zagnieżdżone i lokalne, 8.statyczny składnik struktury, 9.wskaźnik do niestatycznego składnika struktury, 10.modyfikator mutable.
45
19.Klasa biblioteczna std::string: 1.definiowanie stringu, 2.dodawanie, 3.długość, pojemność, 4.rezerwacja pamięci, zmiana rozmiaru, 5.odwoływanie się do poszczególnych znaków w stringu oraz do fragmentów stringu, 6.wyszukiwanie, 7.usuwanie, wstawianie, zastępowanie, zamiana, 8.porównywanie, 9.getline, 10.iteratory stringu.
46
20.Operacje we/wy: 1.operacje we/wy bitowe i tekstowe, 2.posługiwanie się strumieniami, 3.przeładowane operatory przesunięcia bitowego, 4.domniemania, 5.flagi i maski, 6.zmiany formatowania: 1.funkcje zmieniające flagi, 2.funkcje nie zmieniające flag, ale towarzyszące im parametry, 3.manipulatory, 7.nieformatowane operacje we/wy: 1.funkcje wyjmujące ze strumienia, 2.funkcje wstawiające do strumienia, 3.funkcje dodatkowe, 8.Strumienie płynące do i z plików: 1.flagi stanu błędu strumienia, 2.wybór miejsca czytania i pisania, 9.Strumienie płynące do i z obiektów klasy string
47
21.Mechanizm obsługi sytuacji wyjątkowych: 1.bloki try i catch, instrukcja throw, 2.throw vs return, 3.blok try i innym bloku try, 4.blok try w bloku catch, 5.powtórne rzucenie tego samego wyjątku, 6.wartość rzuconego obiektu, 7.funkcje exit, abort, 8.funkcje terminete, set_terminate, 9.funkcje unexpected, set_unexpected.
48
22.Zapis liczb w komputerze: 1.jednostki informacji, 2.systemy addytywne i pozycyjne, 3.reprezentacja liczb całkowitych: 1.liczby nieujemne, 2.kod znak-moduł, 3.kod U1, 4.kod U2, 5.kod z nadmiarem, 6.dodawanie liczb całkowitych, 4.liczby stałoprzecinkowe, 5.liczby zmiennoprzecinkowe (standard IEEE 754), 6.przeliczanie pomiędzy systemami (2, 8, 10, 16), 7.błędy zaokrągleń.
49
Prezentacja udostępniona na licencji Creative Commons: Uznanie autorstwa, Na tych samych warunkach 3.0. Pewne prawa zastrzeżone na rzecz autorów. Zezwala się na dowolne wykorzystywanie treści pod warunkiem wskazania autorów jako właścicieli praw do prezentacji oraz zachowania niniejszej informacji licencyjnej tak długo, jak tylko na utwory zależne będzie udzielana taka sama licencja. Tekst licencji dostępny jest na stronie: http://creativecommons.org/licenses/by-sa/3.0/deed.pl
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.