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

Slides:



Advertisements
Hasonló előadás
C++ programozási nyelv Gyakorlat hét
Advertisements

PL/SQL folytatás Kurzorok Alprogramok Tárolt eljárások ADATBÁZIS ALAPÚ RENDSZEREK.
Tömbök C#-ban.
Kifejezések 2+3 Egy egyszerű kifejezés… © Pasztuhov Dániel, www.programozas-oktatas.hu.
LFüggvények Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 20./0. lFüggvények deklarációja és prototípusa lA függvénydefiníció lHivatkozás.
Hibakezelés és Tesztelés a Visual Studio.NET-ben
JavaScript.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
Fájlkezelés, IO Kivételkezelés Belső osztályok
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Függvények, mutatók Csernoch Mária.
Mutatók, tömbök, függvények
Java programozási nyelv 3. rész – Osztályok I.
A C++ programozási nyelvSoós Sándor 1/10 C++ programozási nyelv Gyakorlat - 5. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A Java programozási nyelvSoós Sándor 1/24 Java programozási nyelv 9. rész – Kivételkezelés Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 1 Fordítóprogramok 1 Programozó matematikus szak 2003/2004-es tanév II. félév.
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 1 Fordítóprogramok 1.5 Programozó matematikus szak 2003/2004-es tanév II. félév.
C# tagfüggvények.
C# tagfüggvények.
6. előadás Hatókör, láthatóság, élettartam. Változók leképzése a memóriára. Blokkszerkezetes nyelvek. Kivételkezelés.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
6. előadás Hatókör, láthatóság, élettartam. Változók leképzése a memóriára. Blokkszerkezetes nyelvek. Kivételkezelés.
Önleíró adatok: XML INFO ÉRA, Békéscsaba
© Kozsik Tamá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.
Programozás I Függvények általános jellemzői
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
Kivételkezelés.
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
Ficsor Lajos CPP6 / 1 Virtuális bázisosztály Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Bevezetés a C++ programozási nyelvbe
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
III. Témakör MISKOLCI EGYETEM LOGISZTIKA ANYAGMOZGATÁSI ÉS LOGISZTIKAI TANSZÉK III./1.
Összetett adattípusok
Programozási nyelvek összehasonlító elemzése
Ismétlés A pascal program szerkezete: program programnev; Programfej
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
1. Gyakorlat - Alapok 1. Írjon konzolprogramot, amely kiírja a “Hello ELTE” üzenetet! Használja a System.out.println() -t! 2. Írjon konzolprogramot, amely.
A PHP 5 újdonságai Az OOP terén. Miről lesz szó? Osztályok kezelése – Új direktívák – Konstruktor – Destruktor Interfészek Kivételkezelés.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 4. Gyakorlat Függvény paraméterek, dinamikus.
Programozás III KIVÉTEL.
Programozás III KIVÉTEL. KIVÉTELKEZELÉS Hibátlan program nincs!!! eddig hiba esetén leállt a program. Példa ilyen hibákra: ─ ArrayBoundsOfException (tömb.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
2012. március 21. Paulik Áron.  Ha a függvényünk feladata olyan, hogy nem lenne értelme a visszatérési értéknek, vagy csak nincs rá szükség, void típusúként.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
Típuskonverzió a C++ nyelvben
A 2. géptermi beszámoló VBA anyagának összefoglalása
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat.
Ficsor Lajos Objektumok inicializálása CPP4 / 1 Objektumok inicializálása Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Objektum orientált programozás 4. Mutatók, típusok és struktúrák Nagy Szilvia.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Kivételek kezelése, ellenőrzött adatbevitel Czigléczky Gábor 2009.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Utasítás és blokk. Elágazás típusai, alkalmazása Kovács.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
a programegységek között
Programozási nyelvek típusossága.
A C++ programozási nyelv
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Informatikai gyakorlatok 11. évfolyam
Előadás másolata:

Kivételkezelés a C++ nyelvben Bevezetés Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék Ficsor Lajos Kivételkezelés a C++ nyelvben

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! Ficsor Lajos Kivételkezelés a C++ nyelvben

Kivételkezelés a C++ nyelvben 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 Ficsor Lajos Kivételkezelés a C++ nyelvben

Kivételkezelés a C++ nyelvben 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 ) catch ( ... ) Ficsor Lajos Kivételkezelés a C++ nyelvben

Kivételkezelés a C++ nyelvben Egyszerű példa 1. try { //utasítások char* szoveg = new char[200]; if ( szoveg == 0 ) throw "nincs memória"; //további utasítások } Ficsor Lajos Kivételkezelés a C++ nyelvben

Kivételkezelés a C++ nyelvben Egyszerű példa 2. catch ( char* uzenet ) { cout << uzenet << '\n'; //további utasítások az adott //állapot (most hiba) lekezelésére } Ficsor Lajos Kivételkezelés a C++ nyelvben

Kivételkezelés a C++ nyelvben Működés 1. az első 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 objektumok megszüntetése létrejön a throw utasításban megjelölt objektum egy példánya Ficsor Lajos Kivételkezelés a C++ nyelvben

Kivételkezelés a C++ nyelvben 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 a catch 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 Ficsor Lajos Kivételkezelés a C++ nyelvben

Egymásba ágyazott kivételkezelők A try blokkok egymásba ágyazhatók explicit, vagy implicit módon (pl. függvényhívás) A catch 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. Ficsor Lajos Kivételkezelés a C++ nyelvben

Leszármaztatott kivétel osztályok Mivel a kivétel egy objektum, kivétel osztályok között lehetséges leszármazási hierarchiá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 Ficsor Lajos Kivételkezelés a C++ nyelvben

Kivételkezelés a C++ nyelvben Á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. Ficsor Lajos Kivételkezelés a C++ nyelvben

Kivételkezelés a C++ nyelvben class AllocError { int meret; public: AllocError(int m) {meret = m;} void uzenet(void) { cerr << meret << "byte lefoglalasa sikertelen" << "\n"; } }; Ficsor Lajos Kivételkezelés a C++ nyelvben

Kivételkezelés a C++ nyelvben class Vektor { int n; int* p; public: class RangeError; Vektor(int hatar); int& operator[] (int i); }; Ficsor Lajos Kivételkezelés a C++ nyelvben

Kivételkezelés a C++ nyelvben class Vektor::RangeError { int index; public: RangeError(void) {index = 0;}; RangeError (int i) {index=i; } void uzenet(void) { cerr<< "Hibas index: " << index << "\n";} }; Ficsor Lajos Kivételkezelés a C++ nyelvben

Kivételkezelés a C++ nyelvben Vektor::Vektor(int hatar) { n = hatar; p = new int[n]; if (p == 0) throw AllocError(n*sizeof(int)); } Ficsor Lajos Kivételkezelés a C++ nyelvben

Kivételkezelés a C++ nyelvben int& Vektor::operator[] (int i) { if (i >= 0 && i < n) return p[i]; throw RangeError(i); } Ficsor Lajos Kivételkezelés a C++ nyelvben

Kivételkezelés a C++ nyelvben int main(int argc, char* argv[]) { try { Vektor v(100); v[100] = 5; } catch (AllocError error) { error.uzenet(); } catch (Vektor::RangError r) { r.uzenet(); } return 0; Ficsor Lajos Kivételkezelés a C++ nyelvben