Wyjątki (exceptions)

Podobne dokumenty
Szablony funkcji i klas (templates)

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196

Programowanie w języku C++

Obsługa błędów za pomocą wyjątków. Paweł Motofa (140746)

Składnia C++ Programowanie Obiektowe, część 3 Mateusz Cicheński

Obsługa wyjątków. Język C++ WW12

Programowanie Obiektowe Ćwiczenie 4

Zaawansowane programowanie w języku C++ Wyjątki

TEMAT : KLASY POLIMORFIZM

Język C++ wykład VIII

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Efekty uboczne błędów

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Programowanie - wykład 4

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Wykład 8: Obsługa Wyjątków

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Listy powiązane zorientowane obiektowo

Wstęp do programowania

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi:

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

Szablony funkcji i szablony klas

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Wstęp do programowania

Wstęp do programowania. Wykład 1

Klasy cd. Struktury Interfejsy Wyjątki

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Programowanie w języku C++

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

3. Instrukcje warunkowe

Rzutowanie i konwersje

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Pytania sprawdzające wiedzę z programowania C++

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Wstęp do programowania obiektowego, wykład 7

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

Podstawy programowania w C++

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

Operacje wejścia/wyjścia (odsłona druga) - pliki

TEMAT : KLASY DZIEDZICZENIE

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Aplikacje w środowisku Java

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Szablon klasy std::vector

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Zaawansowane programowanie w C++ (PCP)

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Programowanie obiektowe w C++ Wykład 12

Programowanie obiektowe w języku

Projektowanie klas c.d. Projektowanie klas przykład

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

Aplikacje w środowisku Java

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Wstęp do Programowania 2

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Programowanie Obiektowew języku C++ Zadania L4

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Klasyfikacja wyjątków

Podstawy Programowania Obiektowego

Podstawy programowania w języku C++

Operacje wejścia/wyjścia odsłona pierwsza

Mechanizm dziedziczenia

dr inż. Jarosław Forenc

Wprowadzenie do szablonów szablony funkcji

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Wprowadzenie do szablonów szablony funkcji

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Programowanie obiektowe. Wykład 5. C++: szablony

Platforma.NET. Laboratorium nr 1 Podstawy języka C#

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Delphi Laboratorium 3

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

I - Microsoft Visual Studio C++

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Programowanie obiektowe

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

Programowanie Obiektowe i C++

Operatory na rzecz typu TString

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Transkrypt:

Instrukcja laboratoryjna nr 6 Programowanie w języku C 2 (C++ poziom zaawansowany) Wyjątki (exceptions) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek

Wstęp Wyjątki (ang. Exceptions) to mechanizm obsługi sytuacji wyjątkowych (zazwyczaj błędów). W trakcie działania programu zawsze może dojść do powstania sytuacji nietypowej trudnej do uniknięci. Można jednak przewidywać iż taka sytuacja wystąpi i się na nią odpowiednio przygotować. Tak jak Java, C# i wiele innych języków obiektowych, język C++ umożliwia obsługę wyjątków, czyli sytuacji, gdy powstaje w czasie wykonania programu błąd uniemożliwiający dalszy jego przebieg (na przykład dzielenie przez zero, wywołanie metody za pomocą pustego wskaźnika, błąd odczytu/zapisu strumienia). Normalnie, powstanie takiej sytuacji powoduje przerwanie programu, zwykle z mało czytelnym komunikatem o naturze błędu. Obsługa wyjątków pozwala na zdefiniowanie przez programistę akcji, które należy podjąć po powstaniu sytuacji wyjątkowej w szczególności programista może świadomie podjąć decyzję o ich całkowitym zignorowaniu. W języku C++ wprowadzono mechanizm pozwalający programiście na reagowanie na sytuacje błędne czy nietypowe. Gdy taka sytuacja wystąpi, programista może wygenerować wyjątek. Wyjątek to obiekt pewnej klasy. Wygenerowanie wyjątku polega na przekazaniu obiektu opisującego wyjątek z fragmentu kodu, w którym wystąpił problem, do fragmentu, w którym przewidziano jego obsługę. Wygenerowanie (zgłoszenie) wyjątku powoduje przerwanie wykonywania sprawiającego problemy kodu i przejście do obsługi sytuacji problematycznej. Obsługa ta może znajdować się w innym miejscu kodu. Wyjątek jest obiektem, jego klasa określa typ sytuacji wyjątkowej. Obiekt może w sobie posiadać pola oraz funkcje składowe, pozwalające na sprecyzowanie informacji o zaistniałej sytuacji wyjątkowej. Wyjątki w C++ możemy podzielić na: Wyjątki własne, Wyjątki standardowe. Do obsługi wyjątków wykorzystuje się blok try...catch. Definicja bloku try...catch wygląda następująco: // "Wyrzucenie" wyjątku: if(coś poszło nie tak) throw wyjątek; // KOD catch (typ nazwa) { // Obsługa wyjątku

throw jest operatorem, po nim następuje wyrażenie które określi rodzaj wyjątku, mogą być różne typy/klasy wyjątków; catch może pojawić się tylko po try lub po innym catch, w nawiasie określamy typ wyjątku i zmienną/obiekt która przekazuje informacje o wyjątku. Jeżeli do obsługo błędu wystarczy sam fakt jego wykrycia to podajemy typ nie podając zmiennej/obiektu. Blok po catch nazywamy procedurą obsługi wyjątku. Procedura obsługi wyjątku może znajdować się w tej samej funkcji w której następuje zgłoszenie wyjątku. Wyjątki wysłane w zakresie instrukcji try, ale nieprzechwycone przez odpowiedni blok catch zostają odebrane przez funkcję obsługi z parametrem wielokropek catch(...). Taki blok łapie wszystkie błędy (pozostałe nie pasujące do innych bloków catch błędy). // KOD catch (int ex) { cout << "wyjątek int"; catch (float ex) { cout << "wyjątek float"; catch (...) { cout << "wyjątek domyślny"; Przykłady implementacji i użycia bloku try...catch: // Listing 1 int n; cout << "Podaj liczbę: "; cin >> n; // Czy ujemna? if (n < 0) throw 1; // Czy zero? if (n == 0) throw 2; // Czy za duża? if (n > 100000) throw 3;

// Wszystko OK: cout << "Kwadrat liczby = " << n*n << endl; catch (int x) { cout << "Wyjątek nr " << x << endl; // Listing 2 int FunkcjaWczytująca() { int A, B; cout << "Podaj dwie liczby: "; cin >> A >> B; if (A < 0) if (B < 0) if (B == 0) throw "Liczba A ujemna!"; throw "Liczba B ujemna!"; throw "Dzielenie przez zero!"; int wynik = A / B; if (wynik == 0) throw "Wynik zerowy!"; cout << "WYNIK = " << wynik << endl; catch (char *s) { cout << "WYJĄTEK: " << s << endl; W języku C++ można zdefiniować własne klasy wyjątków (tworząc własne klasy lub dziedzicząc po standardowej klasie exception), albo do opisu wyjątku wykorzystać już istniejące typy/klasy standardowe. W bibliotekach klas korzystających z wyjątków zazwyczaj korzysta się ze specjalnych klas do określania rodzaju wyjątków. Stosowanie klas jako typów wyjątków jest wygodne, możemy tworzyć klasy o nazwach opisujących typy wyjątków. Klasa standardowa std::exception to klasa bazowa wyjątków wykorzystywanych przez wiele klas standardowych. Najważniejsza metoda klasy to metoda what() która zwraca tekstowy opis wyjątku.

Przykłady implementacji i użycia własnej klasy wyjątku: // Listing 3 #include <iostream> #include <exception> using namespace std; class MojWyjatek: public exception { virtual const char* what() const throw() { return "Moj wyjatek"; ; int main () { MojWyjatek myex; throw myex; catch (exception& e) { cout << e.what() << endl; return 0;

Przykłady implementacji i użycia klasy standardowej wyjątku: // Listing 4 #include <exception> using namespace std; int* myarray = new int[1000]; catch (exception& e) { cout << "Wyjątek: " << e.what() << endl; Zadania do wykonania 1. Napisać program wyliczający pierwiastki równania kwadratowego w postaci: Program powinien pytać użytkownika o podanie trzech parametrów a, b oraz c. W programie należy wykorzystać obsługę wyjątków zabezpieczającą program przed nietypowymi sytuacjami jak: dzielnie przez zero, pierwiastek z liczby ujemnej itp. itd. 2. Napisać program, w którym zostaną zaimplementowane własne klasy wyjątków. Klasy te należy wykorzystać do obsługi wyjątków w programie wyliczającym następujący wzór matematyczny: W y ni k= A B Należy zaprezentować działanie tak stworzonych klas dla różnych rodzajów danych wejściowych. 3. Napisać program, który będzie modyfikacją zadania nr 1 (laboratorium nr 2) implementującego stos przy pomocy kontenera list. Należy zabezpieczyć program tak aby obsługiwał wyjątki. 4. Napisać program, który będzie modyfikacją zadania nr 2 (laboratorium nr 2) implementującego listę uczniów w klasie przy pomocy kontenera set. Należy zabezpieczyć program tak aby obsługiwał wyjątki.