11.1 Obsługa błędów i wyjątków Polecenia try, throw, catch CLI C++, klasa Exception... 9

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

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

Wyjątki (exceptions)

Programowanie 2. Język C++. Wykład 3.

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

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

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

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

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

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

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

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

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

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

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

Język C++ wykład VIII

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

Klasy cd. Struktury Interfejsy Wyjątki

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

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

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

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

TEMAT : KLASY POLIMORFIZM

Programowanie Komputerów

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

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

Programowanie Obiektowe Ćwiczenie 4

Zaawansowane programowanie w C++ (PCP)

Plik klasy. h deklaracje klas

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

Programowanie w języku C++

Programowanie obiektowe w C++ Wykład 12

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

Programowanie 2. Język C++. Wykład Relacje między klasami, klasy zagnieŝdŝone, klasy lokalne

Programowanie obiektowe

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Programowanie obiektowe

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Wstęp do Programowania 2

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Efekty uboczne błędów

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

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

Wykład 04. Programowanie obiektowe. Maciej Wołoszyn 17 marca Spis treści

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

Projektowanie klas c.d. Projektowanie klas przykład

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

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

Podstawy programowania obiektowego

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

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

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

Programowanie 2. Język C++. Wykład 2.

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory

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

Programowanie 2. Język C++. Wykład 9.

Dziedziczenie & W slajdach są materiały zapożyczone z

Wyjątki. try - except

Konwencje obsługi błędów

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

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

Język C++ Różnice między C a C++

Wstęp do Programowania 2

Programowanie obiektowe

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

PARADYGMATY PROGRAMOWANIA Wykład 4

Ada-95. Dariusz Wawrzyniak

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

Techniki Programowania wskaźniki

Do czego służą klasy?

Zaawansowane programowanie w C++ (PCP)

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

Programowanie obiektowe i C++ dla matematyków

Wykład 5 Okna MDI i SDI, dziedziczenie

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

PARADYGMATY PROGRAMOWANIA Wykład 3

Programowanie obiektowe w języku

Programowanie w środowiskach graficznych. Wykład 3 Język 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.

Programowanie w języku C++

Rzutowanie i konwersje

Identyfikacje typu na etapie. wykonania (RTTI)

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Pobieranie argumentów wiersza polecenia

Wstęp do programowania

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Java SE Laboratorium nr 4. Temat: Obsługa wyjątków i zdarzeń

PARADYGMATY PROGRAMOWANIA Wykład 2

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

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

Kurs programowania. Wykład 9. Wojciech Macyna

Programowanie. Sylwester Arabas. prowadzący ćwiczenia: Magdalena Kuich, Krzysztof Piasecki, Łukasz Dulny. Wydział Fizyki Uniwersytetu Warszawskiego

Konstruktor kopiujacy

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

it = 0; memset((void *)ptr, 0, items*sizeof(double)); cout << "Konstruktor sparametryzowany " << title << " adres: " << ptr << "\n";

Programowanie obiektowe

Transkrypt:

11.1 Obsługa błędów i wyjątków... 1 11.2 Polecenia, throw, catch... 1 11.3 CLI C++, klasa Exception... 9 11.1 Obsługa błędów i wyjątków błąd - przyczyna, która powoduje niewłaściwe działanie programu. error róŝnica między spodziewanym a faktycznym działaniem programu. fault, bug defekt, przyczyna, która powoduje niewłaściwe działanie programu. failure stan w którym program nie działa właściwe. mistake działanie człowieka, które powoduje niewłaściwe działanie programu. wyjątek (exception) przewidywalne przez programistę niewłaściwe zachowanie programu wykonywalnego. wyjątek (IEEE 610, Standard Computer Dictionary) - zdarzenie które powoduje niewłaściwe działanie programu. RozróŜnia się następujące typy wyjątków: niewłaściwe adresowanie, niewłaściwe dane, niewłaściwie wykonana operacja, przepełnienie (overflow exception), niedopełnienie (underflow exception), niewłaściwa ochrona (protection exception). wyjątek jest to obiekt, który przekazuje informację o niewłaściwym działaniu programu do innego obszaru programu. debugging - proces wykrywania i usuwania błędów w programie. obsługa wyjątków proces analizy zdarzeń które mogą powodować niewłaściwe zachowanie programu i definiowanie procedur alternatywnych zachowań programu. 11.2 Polecenia, throw, catch Składnia polecenia:, throw, catch. <instrukcje>; throw <obiekt>; catch(<obiekt>) <instrukcje>; 1

Przykład 1. Polecenie, throw & catch ( w11-01--catch.cpp). throw "tekst z obszaru "; // wyrzuć tekst catch(const char * msg) // złap wyrzucony tekst i przypisz do wskaźnika msg cout << msg << endl; W bloku, instrukcje po poleceniu throw nie są juŝ wykonywane. Przykład 2. Polecenie, throw & catch (w11-02--throw-catch.cpp) cout << "Przed throw" << endl; throw 007; // wyrzuć liczbę 7 cout << "Po throw" << endl; // instrukcja nie zostanie wykonana catch (int i) // złap wyrzuconą liczbę cout << "Blad #" << i << endl; 2

Instrukcja catch() stosowana jest do odpowiedniego wyrzuconego typu. Przykład 3. Wyłapanie odpowiedniego typu przez instrukcję catch()(w11-03--throw-catch.cpp). // throw 7; throw 3.14; catch (int i) cout << "Blad, #" << i << endl; catch (double d) // złapany typ double cout << "Blad, wpisales liczbe: " << d << endl; catch()wyłapuje wyrzucony typ gdy jest tego samego typu co typ wyrzucany, typu const lub referencją typu wyrzucanego. Przykład 4. Wyłapanie typu const, referencji typu wyrzucanego (w11-04-catch-throw.cpp). int x = 7; throw x; // polecenie catch() wyłapuje wyrzuconą zmienną typu int gdy: // catch (const int ci), catch (int i), catch (int & r) /* catch (int i) cout << "Blad, x= " << i << endl; /* catch (const int ci) cout << "Blad, x= " << ci << endl; catch (int & r) cout << "Blad, x= " << r << endl; 3

Przykład 5. Try&catch obiektowo (w11-05-catch-throw.cpp). class A A() i=100; int i; ; class B: public A ; B b; throw b; catch (A a) cout << "Blad, a.i= " << a.i << endl; /* catch (A &a) // teŝ OK cout << "Blad, a.i= " << a.i << endl; Przykład 6. Try&catch obiektowo (w11-06-catch-throw.cpp). class A A() i=100; int i; ; class B: public A ; B b; B * pb = &b; throw pb; catch (A * pa) cout << "Blad, pa->i= " << pa->i << endl; 4

Przykład 7. Obsługa wyjątku przepełnienia (w11-07-overflow.cpp). class Wyjatek Wyjatek() cout << "Wyjatek()" << endl; ~Wyjatek() cout << "~Wyjatek()" << endl; void f() cout << "obsluga wyjatku" << endl; ; int i = 4294967296; if (i == 0) throw Wyjatek(); catch (Wyjatek & e) e.f(); Przykład 8. Klasa do obsługi błędów (w11-08-errorinfo.cpp). #include <string> class ErrorInfo std::string gdzie; std::string przyczyna; ; void f(bool b) ErrorInfo e; if (b==0) e.gdzie = "f()"; e.przyczyna = "blad wywolania "; throw e; f(0); catch (ErrorInfo const &e) std::cout << e.przyczyna << e.gdzie << std::endl; 5

Metoda fun() wyrzuca obiekt utworzony za pomocą konstruktora kopiującego. W poleceniu catch (A & e) tworzona jest referencja typu A. W poleceniu catch (A e) tworzony jest obiekt typu A za pomocą konstruktora kopiującego. Przykład 9. Konstruktor kopiujący (w11-09-throwkonstrktorkopiujacy.cpp). #include <string> class A A(string s) : str(s) cout << "A(string)" << endl; A(A const &r) : str(r.str + " (kopia)") cout << "A(A&r)" << endl; ~A()cout << "~A()" << endl; void fun(); void msg() cout << str << endl; private: string str; ; void A::fun() A e(" *** obiekt lokalny, w fun() *** "); // wywoływany jest A(A const &r) throw e; A a("obiekt"); // wywoływany jest A(string) a.fun(); catch (A & e) cout << "wyjatek, " ; e.msg(); /* Wynik działania programu: A(string) A(string) A(A&r) ~A() wyjatek, *** obiekt lokalny, w fun() *** (kopia) ~A() ~A() 6

Przykład 10. Klasa wyjątek (w11-10-wyjatek.cpp). #include <string> class Wyjatek Wyjatek(char *); char* pokazstr() return str; private: char * str; ; Wyjatek::Wyjatek(char * pch) str = new char[80]; char komunikat[] = "Brak pamieci dla: "; strncpy(str,komunikat,60); // funkcja przypisuje 60 znaków // str = komunikat; zwraca str, strncat(str,pch,19); // funkcja łączy 19 znaków pch z str int * pi = new int; if (pi) throw Wyjatek("int"); catch (Wyjatek & e) cout << e.pokazstr() << endl; 7

Przykład 11. Polecenie &catch i metody wirtualne (w11-11--catch-virtual.cpp). class A virtual void f() cout << "virtual f() z A" << endl; ; class B : public A void f() cout << "f() z B" << endl; ; void g() throw B(); g(); catch(a a) a.f(); g(); catch(a& a) a.f(); /* Wynik działania programu: virtual f() z A f() z B 8

11.3 CLI C++, klasa Exception Przykład 1. UŜycie obiektów klasy Exception (w11-12-catch-throw-cli.cpp). #include "stdafx.h" using namespace System; int x = 0; int y = 100 / x; catch ( ArithmeticException^ e ) Console::WriteLine( "ArithmeticException Handler: 0", e ); // catch ( Exception^ e ) // // Console::WriteLine( "Generic Exception Handler: 0", e ); // /* wynik działania program: ArithmeticException Handler: System.DivideByZeroException: Attempted to divide by zero. at main() in c:\cl rcon\clrcon.cpp:line 10 9

Elementy klasy Exception Konstruktor Exception Przeładowany. Initializes a new instance of the Exception class. Metody Equals Finalize GetBaseException GetHashCode GetObjectData GetType MemberwiseClone ToString Properties Data HelpLink HResult InnerException Message Source StackTrace TargetSite Determines whether the specified Object is equal to the current Object. (Inherited from Object.) Allows an Object to attempt to free resources and perform other cleanup operations before the Object is reclaimed by garbage collection. (Inherited from Object.) When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions. Serves as a hash function for a particular type. (Inherited from Object.) When overridden in a derived class, sets the SerializationInfo with information about the exception. Gets the runtime type of the current instance. Creates a shallow copy of the current Object. (Inherited from Object.) Creates and returns a string representation of the current exception. (Overrides Object..::.ToString()()().) Gets a collection of key/value pairs that provide additional user-defined information about the exception. Gets or sets a link to the help file associated with this exception. Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception. Gets the Exception instance that caused the current exception. Gets a message that describes the current exception. Gets or sets the name of the application or the object that causes the error. Gets a string representation of the frames on the call stack at the time the current exception was thrown. Gets the method that throws the current exception. 10