Erklarung von exception Handling für nen Noob
-
Hey also ich hab mal ne Frage ich bin schüler und hab erst seit sommmer C++ im Unterricht. Jetz soll ich ein freiwilliges Referat schreiben über "Exception Handling". Kann mir einer (oder mehrere) erklären was das genau ist und mir nen leicht verstdänliches Beipiel dazu geben und vor allem die richtige "catch" anwendung erklären, weil meine ganzen übungsprogs funktionieren alle net.
Ein kleine Beispiel wär echt super.
Mfg Christian
P.S.: Danke schonmal im vorraus
-
glaub da gibts nen artikel dazu (unten)
-
-
Oder hier: http://www.kharchi.de/cppratgeber3.htm
-
Artchi schrieb:
Oder hier: http://www.kharchi.de/cppratgeber3.htm
obwohl du es im code zwar gemacht hast fehlt die aussage:
throw by value, catch by referenceund du solltest erwaehnen dass throw spezifikationen sinnlos und lieber unterlassen werden sollten...
ich finde die beispiele am schluss sind ne nette idee...
-
Hey also erstmal danke für euere Hilfe, aber ich versteh trotzdem noch nicht was in die Catch(?????) Klammer soll.
Weiter hab ich mal nen ganz einfaches prog geschrieben und ich weiß0 net was daran falsch ist aber wenn ich bei Zahl 2 gleich null eingeb dann machts bumm (nicht lachen über mein prog).
Hier ist es mal:#include<iostream>
#include<conio>
using namespace std;void main()
{
try
{
int Zahl1=1;
int Zahl2=1;
int erg=999;
cin>>Zahl1;
cin>>Zahl2;
erg=Zahl1/Zahl2;
cout<< erg;
}catch (...)
{
cout << "Fehler";}
getch();
}
Mfg Christi
-
Also Zahl1 durch 0 ist nicht erlaubt!!! Da fliegt dir die CPU aus der Bahn. Hat nichts mit C++ zutun. Normalerweise, wenn sowas sicher sein soll, muß man Zahl2 vorher mit if auf 0 prüfen, und nur wenn es ungleich 0 ist, die Rechnung druch führen. Hast wohl nicht meinen geposteten Link oben nicht gelesen? Da ist doch so ein Beispiel bei.
catch(...) heißt "fang alles ab". Wenn es aber bei durch null nicht hilft, ist die Ursache tiefer in der Hardware, in dem Fall CPU. Da kann auch C++ nichts mehr reissen.
-
Hallo Christi,
dein Programm stürzt bei einer Division durch Null ab, weil die entstehende Exception nicht von deinem Programm, sondern vom Prozessor geworfen wird. Diese Exception wird grundsätzlich vom Betriebssystem aufgefangen, was dann zu besagtem Programmende und einer Fehlermeldung führt. Es gibt eine Möglichkeit auch solche Exceptions aufzufangen, was aber den Umfang deiner Arbeit wohl sprengen würde.
Erweitere dein Programm ganz einfach um folgende Zeile, an der Stelle nachdem die zweite Zahl eingelesen wurde:
if (Zahl2 == 0) throw Zahl2;
Damit sollte dein Programm wie gewünscht funktionieren.
Gruß
-
Hey also erstmal danke für eur hilfe hab es endlich so halbwegs geschafft (musst erst ma in den debugger optionen einstellen das er net bei exceptions automatisch das Prog stoppen soll). Aber ich hab noch ein Problem:
Wie ist das mit dem catch was kann ich da alles in die klammer schreiben und wie und was bedeutet das dann, wär gut wenn mir jemadn helfen könnte.
Danke.
Mfg
-