Kivételkezelés a C++ nyelvben Bevezetés

Hasonló dokumentumok
Kivételek, kivételkezelés a C++ nyelvben

Java IX. telkezelés a Java-ban

Java IX. telkezelés a Java-ban

Globális operátor overloading

Gregorics Tibor Modularizált programok C++ nyelvi elemei 1

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

A C programozási nyelv II. Utasítások. A függvény.

A C++ szigorúbban kezeli a típuseltéréseket, mint a C nyelv Lehetséges típuskonverziók:

Objektumok inicializálása

Pénzügyi algoritmusok

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

A C programozási nyelv VI. Parancssori argumentumok File kezelés

OOP #14 (referencia-elv)

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Java programozási nyelv 9. rész Kivételkezelés

Virtuális függvények (late binding)

Programozás I. 5. Előadás: Függvények

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Származtatási mechanizmus a C++ nyelvben

ISA szimulátor objektum-orientált modell (C++)

A C programozási nyelv III. Pointerek és tömbök.

Objektumorientált programozás C# nyelven

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

A C programozási nyelv III. Pointerek és tömbök.

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

Java II. I A Java programozási nyelv alapelemei

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Java II. I A Java programozási nyelv alapelemei

Programozás alapjai II. (4. ea) C++

Programozás II. 4. Dr. Iványi Péter

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Objektumorientált programozás C# nyelven

Osztályok. 4. gyakorlat

A C programozási nyelv IV. Deklaráció és definíció

Informatika terméktervezőknek

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

7. K: JAVA alapok Konzultáció

Programozási nyelvek Java

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

A függvények névvel rendelkező utasításcsoportok, melyeknek információkat adhatunk át, és van egy visszatérési értékük.

JAVA PROGRAMOZÁS 2.ELŐADÁS

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

Programozás C++ -ban

- 1 - Konstansok használata. Döntsük el, van-e fordítási idejű hiba az alábbi programrészletekben! a) const char * str="zh"; str[0]++;

Java és web programozás

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

OOP és UML Áttekintés

és az instanceof operátor

Osztálytervezés és implementációs ajánlások

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Osztálytervezés és implementációs ajánlások

Objektumorientált programozás C# nyelven III.

Programozás C++ -ban

1. Bevezetés A C++ nem objektumorientált újdonságai 3

Programozás II gyakorlat. 6. Polimorfizmus

Programozás C++ -ban 2007/4

Programozás alapjai II. (2. ea) C++

Programozás alapjai II. (2. ea) C++

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

1. Alapok. Programozás II

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Java és web programozás

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Bevezetés a C++ programozási nyelvbe

A programozás alapjai 1 Rekurzió

Programozás módszertan

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

Java és web programozás

Programozási Nyelvek: C++

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

Objektumorientált programozás C# nyelven III.

Pénzügyi algoritmusok

7. fejezet: Mutatók és tömbök

Programozás. C++ típusok, operátorok. Fodor Attila

3. Osztályok II. Programozás II

Programozás alapjai II. (4. ea) C++

Programozás alapjai II. (4. ea) C++

Már megismert fogalmak áttekintése

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Programozási nyelvek Java

C++ programozási nyelv Konstruktorok-destruktorok

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Kivételek. A program végrehajtása során ritkán bekövetkező események Nem a fő végrehajtási ág ; logikailag alacsonyabbrendű feladat jelzése

Programozási nyelvek Java

Szoftvertechnológia alapjai Java előadások

Átírás:

Kivételkezelés a C++ nyelvben Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Kivételkezelés a C++ nyelvben CPP9 / 1 Hagyományos hibakezelés Függvény visszatérési értéke (paramétere) hátrányai: azonosítás hibaérték / valódi érték hívási hierarchia! globális változó C++: hibastátusz adattag és visszaadó függvény Ellenÿrzés nehézkes, sok helyre kell beiktatni. Kód áttekinthetÿségét rontja! Kivételkezelés a C++ nyelvben CPP9 / 2 Kivétel fogalma Nem azonos az operációs rendszer exeption fogalmával. Kivétel az, amit programozó annak tekint. A C++ szemléletében a kivétel egy objektum, ami a kivétel bekövetkezésekor jön létre. Kivétel kiváltása: throw Kivételkezelés a C++ nyelvben CPP9 / 3 CBEV/ 1

A kivételek kezelése try blokk: a "védett" programrészt fogja közre. try utasítások catch blokk(ok): a keletkezett kivételek lekezelése catch (típus paraméter) utasítások vagy catch ( típus ) vagy catch (... ) Kivételkezelés a C++ nyelvben CPP9 / 4 try //utasítások Egyszerÿ példa 1. char* szoveg = new char[200]; if ( szoveg == 0 ) throw "nincs memória"; //további utasítások Kivételkezelés a C++ nyelvben CPP9 / 5 Egyszerÿ példa 2. catch ( char* uzenet ) cout << uzenet << '\n'; //további utasítások az adott //állapot (most hiba) lekezelésére Kivételkezelés a C++ nyelvben CPP9 / 6 CBEV/ 2

Mÿködés 1. azelsÿ throw utasítással befejezÿdik a try blokk végrehajtása kilép a blokkból a vezérlés, rendcsinálással verem visszaállítása lokális objektumokmegszüntetése létrejön a throw utasításban megjelölt objektum egy példánya Kivételkezelés a C++ nyelvben CPP9 / 7 Mÿködés 2. megkeresi a program azt az elsÿ catch blokkot, amely a kivétel objektumra illeszkedik (az illeszkedés fogalmát késÿbb pontosítjuk) végrehajtja a blokk utasításait acatch blokk végrehajtása után az utolsó catch blokk utáni elsÿ utasításra kerül a vezérlés ha kivétel keletkezett, de egy catch blokk sem illeszkedett, a terminate függvény hívódik meg, ami leállítja a programot Kivételkezelés a C++ nyelvben CPP9 / 8 Egymásba ágyazott kivételkezel k Atry blokkok egymásba ágyazhat explicit, vagy implicit módon (pl. függvényhívás) Acatch blokkok keresése (és a verem visszagombolyítása) "belülrÿl kifelé" történik. Ha verem visszagombolyítás közben újabb kivétel keletkezik, a terminate függvény hívódik meg A kivétel lekezelése (vagy annak egy része) továbbhárítható a feljebb álló szintekre a paraméter nélküli throw utasítással. Kivételkezelés a C++ nyelvben CPP9 / 9 CBEV/ 3

Leszármaztatott kivétel osztályok Mivel a kivétel egy objektum, kivétel osztályok között lehetséges leszármazási hierachiát létrehozni, és ezzel csoportosítani a kivételeket. Egy E kivételobjektum illeszkedik a cath (H) blokkra, ha H és E típusa azonos H egy egyértelm bázisosztálya E-nek H és E pointerek és alaptípusukra a fenti érvényes H egy referencia, és a hivatkozott típusra az elsÿ két pont valamelyike érvényes Kivételkezelés a C++ nyelvben CPP9 / 10 Általános catch blokk Formája: catch (... ) Erre a blokkra bármilyen kivétel objektum illeszkedik, tehát logikusan csak az utolsó lehet a blokkok sorában. Használhatjuk arra, hogy minden egyéb, speciális kezelés nem igénylõ kivételt itt kezeljünk le. Gyakran végzÿdik a kivétel továbbdobásával. Kivételkezelés a C++ nyelvben CPP9 / 11 class AllocError int meret; public: AllocError(int m) meret = m; void uzenet(void) cerr << meret << "byte lefoglalasa sikertelen" << "\n"; ; Kivételkezelés a C++ nyelvben CPP9 / 12 CBEV/ 4

class Vektor int n; int* p; public: class Range; Vektor(int hatar); int& operator[] (int i); ; Kivételkezelés a C++ nyelvben CPP9 / 13 class Vektor::Range int index; public: Range(void) index = 0;; Range (int i) index=i; void uzenet(void) cerr<< "Hibas index: " << index << "\n"; ; Kivételkezelés a C++ nyelvben CPP9 / 14 Vektor::Vektor(int hatar) n = hatar; p = new int[n]; if (p == 0) throw AllocError(n*sizeof(int)); Kivételkezelés a C++ nyelvben CPP9 / 15 CBEV/ 5

int& Vektor::operator[] (int i) if (i >= 0 && i < n) return p[i]; throw Range(i); Kivételkezelés a C++ nyelvben CPP9 / 16 int main(int argc, char* argv[]) try Vektor v(100); v[100] = 5; catch (AllocError error) error.uzenet(); catch (Vektor::Range r) r.uzenet(); return 0; Kivételkezelés a C++ nyelvben CPP9 / 17 CBEV/ 6