30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

15.7 Weiterführendes zu Exceptions 485<br />

E<strong>in</strong>fluss nehmen. Die erste Möglichkeit ist, bei e<strong>in</strong>er Methode bzw. Funktion<br />

die Exception bad_exception durch e<strong>in</strong>e throw Angabe als erlaubte Exception<br />

zu deklarieren. Darauf reagiert der Compiler und setzt nicht mehr Code<br />

e<strong>in</strong>, der das Programm beendet. Stattdessen setzt er Code e<strong>in</strong>, der im Fall e<strong>in</strong>er<br />

nicht deklarierten Exception e<strong>in</strong>e bad_exception wirft. Diese wiederum<br />

kann man nach altbekannter Manier fangen.<br />

Vorsicht Falle: Nicht alle Compiler folgen dieser Spezifikation, was natürlich<br />

wieder zu netten Überraschungen führen kann. Deshalb ist es sicherer, gleich<br />

zur <strong>in</strong> der Folge vorgestellten Methodik zu greifen, mit der man genau dieses<br />

Verhalten explizit implementieren kann.<br />

Die andere Möglichkeit, E<strong>in</strong>fluss zu nehmen, ist der unexpected_handler,<br />

der im Pr<strong>in</strong>zip sehr ähnlich funktioniert, wie der new_handler, den wir bereits<br />

kennen gelernt haben. Sehen wir uns diese beiden Möglichkeiten am<br />

besten gleich am Beispiel an (unexpected_exc_demo.cpp):<br />

1 // unexpected exc demo . cpp − demo , how to deal with unexpected<br />

2 // exceptions<br />

3<br />

4 #<strong>in</strong>clude <br />

5 #<strong>in</strong>clude < t y pe<strong>in</strong>fo><br />

6 #<strong>in</strong>clude <br />

7 #<strong>in</strong>clude ” u s e r t y p e s . h”<br />

8<br />

9 us<strong>in</strong>g std : : cout ;<br />

10 us<strong>in</strong>g std : : endl ;<br />

11 us<strong>in</strong>g std : : bad exception ;<br />

12 us<strong>in</strong>g std : : set unexpected ;<br />

13<br />

14 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

15 class OneException<br />

16 {<br />

17 } ;<br />

18<br />

19 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

20 class AnotherException<br />

21 {<br />

22 } ;<br />

23<br />

24 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

25 void doSometh<strong>in</strong>g ( )<br />

26 throw( OneException , bad exception )<br />

27 {<br />

28 static u<strong>in</strong>t32 c a l l c o u n t e r = 0;<br />

29 i f ( c a l l c o u n t e r ++ % 2)<br />

30 {<br />

31 cout

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!