Kezdőoldal » Számítástechnika » Programozás » Nem értem a kivételeket még...

Nem értem a kivételeket még mindig, elmagyarázná valaki? C++.

Figyelt kérdés

Több mint egy hete próbálkozok vele de az internetről sem tudtam megtanulni.


Tudom mire van csak nem tudom használni.

Egy leírásból sem sikerült.Pedig szerintem nem nehezebb a tömböktől, sablonoktól vagy a mutatóktól ezeket mind teljesen értem.


Csak a kivételkezelés nem megy.

Honnan tanuljam meg?


Segítsetek valahogy pls mert teljesen ki vagyok tőle idegileg már.


Ezekről van szó:

try

catch

except

throw


2012. dec. 18. 21:59
 1/10 anonim ***** válasza:

Mit nem értesz rajta?

Egy függvényben, osztályban, akármiben ha valami rendellenes esetet akarsz lekezelni, akkor kivételt dobsz a throw paranccsal.

Ezt meg a meghívás helyén lekezeled.

Try blokkba ágyazod azt a részt, ahol a kivétel várható, majd utána catch-el elkapod és lekezeled.

Na mindjárt írok valami egyszerű példát.

2012. dec. 18. 23:27
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:

Egyszerű példa:


Az Exceptions-nek nyilván nem muszáj ezt a nevet adni, csak ez így szép és logikus, illetve nem muszáj felsorolt (enum) típusnak sem lennie, ez csak kb a legegyszerűbb eset.

Ha szebben szeretnéd kezelni az adott kivételt, ez lehet egy struktúra is, amiben eltárolod az adott hiba paramétereit, és azt kezeled le.


#include <iostream>


using namespace std;


enum Exceptions {NULLAVALNEMOSZTUNK};


double osztas (double a, double b)

{

if (b==0) throw NULLAVALNEMOSZTUNK;

return a/b;

}


int main()

{

double osztando,oszto;

cout<<"Kérem az osztandót: ";

cin>>osztando;

cout<<"Kérem az osztót: ";

cin>>oszto;

try

{

cout<<"Az eredmény: "<<osztas(osztando,oszto)<<endl;

}

catch (Exceptions ex) {if (ex==NULLAVALNEMOSZTUNK) cout<<"0-val nem lehet osztani!"<<endl;}


return 0;

}

2012. dec. 18. 23:40
Hasznos számodra ez a válasz?
 3/10 iostream ***** válasza:
Ha mindent értesz a sablonokról, kérlek írj nekem egy metaprogramot, ami mondjuk előállítja a Fibonacci sorozat első N elemét.
2012. dec. 19. 10:25
Hasznos számodra ez a válasz?
 4/10 anonim ***** válasza:

:D

Az mondjuk tényleg kemény, ha valaki a sablonokat "teljesen érti" a kivételkezelést meg egyáltalán nem. :D

2012. dec. 19. 10:34
Hasznos számodra ez a válasz?
 5/10 A kérdező kommentje:

De semmi nehéz nincs a sablonokban.

Találtam egy weboldalt ahol szépen le volt írva a szintaktikája.


Ha függetlenné szeretném tenni egy osztályt hogy ne csak intet tudjon tárolni hanem stringet is képes legyen lekezelni akkor a sablonokkal ez megoldható.


A sablon példányaival fogom definiálni a konstruktor egy paraméterét.


Nem nagy ügy.


A kivételkezelésről meg az interneten nem találok megfelelő leírást sajnos.

A sablonokat sem a könyvemből értettem meg mert hülyén volt ez kitárgyalva a 24 órás könyvben.


De értem én a kivételkezelést is elméleti szinten de a gyakorlatban nem tudom alkalmazni mert nem értem a szintaktikát.

2012. dec. 19. 11:39
 6/10 A kérdező kommentje:

23:40 es példájában ebben a sorban mi hívódik meg?

if (b==0) throw NULLAVALNEMOSZTUNK; Ez egyenlő ezzel throw 0


Ez mit hív meg: throw 0?

2012. dec. 19. 11:41
 7/10 iostream ***** válasza:
Az enum értéke konvertálódik 0-vá, ha intként akarod használni, de attól még az ő típusa az enum típusa.
2012. dec. 19. 12:08
Hasznos számodra ez a válasz?
 8/10 iostream ***** válasza:
47%
Hozzáteszem, elhiszem, hogy tudsz template-t használni, csak ne jelentsd ki ilyen magabiztosan, hogy teljesen érted őket. A template egy turing teljes nyelv. Mutatóból is biztos tudnék olyat mutatni, hogy belezavarodnál.
2012. dec. 19. 12:09
Hasznos számodra ez a válasz?
 9/10 A kérdező kommentje:

Ebben a sorban mi hívódik meg?

if (b==0) throw NULLAVALNEMOSZTUNK

2012. dec. 19. 12:37
 10/10 iostream ***** válasza:
Semmi nem hívódik meg. A throw az egy statement, egy "utasítás", nem pedig függvény. Implicit persze csomó minden meghívódhat, de nyelvi szinten semmi. A thrownál elkezdi keresni, hogy a hívókörnyezetben hol van catch, ami elkapja ezt, azokban a függvényekben, ahonnan kilép, minden lokális objektumot megsemmisít. Ha nincs ilyen catch, akkor unhandled exception, ami alapesetben terminate, ami alapesetben abort.
2012. dec. 19. 13:55
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!