Obsługa wyjątków

Nasza ocena:

4
Wyświetleń: 672
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

Podgląd dokumentu
Obsługa wyjątków - strona 1

Fragment notatki:


Obsługa wyjątków Wykład 8 10/11/29 2 Powody wprowadzenia obsługi  wyjątków  Podczas wykonania programu mogą wystąpić  przypadki, które nie zostały przewidziane przez  programistę  Np. użytkownik wprowadził złe dane  Kontakt z urządzeniem zewnętrznym został  przerwany  W celu uniknięcia przerwania pracy programu  konieczne jest zaimplementowanie obsługi błędów  Jedną z możliwości jest obsługa błędów poprzez  znaczniki statusów (używane w C)  W C++ natomiast wprowadzono nowy znacznie  ogólniejszy mechanizm pozwalające na obsługę  wyjątków 10/11/29 3 Obsługa wyjątków  Wyjątek nie zawsze oznacza błąd  Błąd jest niejako podzbiorem wyjątków  Sytuacją wyjątkową (wyjątkiem) może być  wszystko co my programiści za to uznamy  Obsługa wyjątków stanowi nowy sposób obsługi  błędów i sytuacji nazwijmy to niecodziennych  Należy stosować kiedy tylko jest to możliwe  Stanowi wbudowaną własność języka  Umożliwia obsługę wyjątków w każdym ich  znaczeniu za pomocą mechanizmu niezależnego od  zasadniczego przepływu sterowania w programie 10/11/29 4 Obsługa błędów poprzez znaczniki  statusów (C)  Odbywa się poprzez kontrolę wartości  zwracanych przez funkcję i wywoływaniu procedur  obsługujących błędy  Błędy są wykrywane i obsługiwane przez kod  programu  Nie ma różnicy między zwykłym przepływem sterowania  programem, a obsługą błędów  Standardowy przepływ jest wymieszany z blokami obsługi  błędów  Wystąpienie błędu sygnalizowane jest jakąś specjalną  wartością zwracaną  Pojawią się problemy kiedy funkcja jako legalną wartość  może zwrócić zbiór pełny (np. wszystkie liczby typu  int  lub  znaki, itp.) 10/11/29 5 Języki obiektowe (C++)  W takich językach wiele operacji w ogóle nie  zwraca żadnej wartości, czyli nie ma możliwości  zwrócenia wartości sygnalizującej błąd  Np. tworzenie nowych obiektów (wywoływany jest  konstruktor)  Wykrycie błędu to nie jeden problem, istotne jest  również poprawne jego obsłużenie  Istnieje potrzeba wbudowania mechanizmu, który  pozwoliłby na oddzielenie wykrywania błędów od  ich obsługi oraz umożliwiał przekazywanie  informacji w inny sposób niż parametry zwracane  Właśnie obsługa wyjątków daje takie możliwości 10/11/29 6 Koncepcja obsługi wyjątków  Wyjątki przetwarzane są w języku C++ w  następujący sposób  Jeżeli niespodziewana sytuacja wystąpi wewnątrz 

(…)

… wszystkie obiekty automatyczne
zostają zniszczone
Jeżeli argumentem instrukcji throw jest obiekt
automatyczny to on też zostanie zniszczony


Dlaczego obiekt kopiowany jest do obszar statycznego?


Ale informacja zostanie przekazana przez jego kopię,
umieszczoną w obszarze zmiennych statycznych
Kompilator np. nie tworzy obiektu operatorem new, gdyż
właśnie brak pamięci może być przyczyną wyrzucenia wyjątku
Przykład cpp_8.6
10/11/29
18
throw i argumenty nieautomatyczne

Oczywiście możemy za pomocą instrukcji
throw rzucać obiekty nieautomatyczne




Obiekty globalne
Obiekty stworzone operatorem new (jeżeli
powód rzucenia wyjątku nie jest brak pamięci)
Jednak niezależnie jaki obiekt będziemy
wyrzucać to catch zawsze odbiera kopię
tego obiektu
Przykład cpp_8.7
10/11/29
19
Wyjątki w destruktorach…

out_of_range
ios_base::failure
range_error
runtime_error
bad_exception
10/11/29
overflow_error
underflow_error
26
Standardowe klasy wyjątków...


Zdefiniowane są w pliku nagłówkowym exception (w
większości)
Definiowane nasze klasy wyjątków powinny być
pochodne względem std::exception


W klasie std::exception zdefiniowana jest
wirtualna metoda what(), która zwraca komunikat
specyficzny dla danej…
... zobacz całą notatkę

Komentarze użytkowników (0)

Zaloguj się, aby dodać komentarz