これまでC言語などでは、setjmpやlongjmp関数、関数の戻り値などをみて、異常な値の場合はエラー処理をしていた・・・。
C++などのオブジェクト指向言語の多くは、より高度なエラー処理をするために例外処理機構をもっている・・・。
入力された値xが0以下だった場合、例外として処理する・・・。
例外が起きそうな処理をtryブロックで囲む・・・。
xが0のとき、
throw句で、文字列"zero"をパラメータとして例外を投げる・・・。
一方、xが0より小さいときは、
throw句で、xをパラメータとして例外を投げる・・・。
パラメータが文字列の場合は、
このcatch句で例外処理をする・・・。
一方、intの値なら、
このcatch句で例外処理をする・・・。
実際に入力すると、
$ ./exception x: 0 throw: zero catch: zero $ ./exception x: -5 throw: -5 catch: -5 $
0と-5で投げられるcatch句が違う・・・。
このようにパラメータの型で例外処理を分けられる・・・。
今回は文字列とintで分けたが、実際には例外ごとに例外クラスを作って、それごとに分けるのが一般的・・・。
というかMFCや.NETFrameworkなど大抵のフレームワークはさまざまな例外クラスを準備しているので、そのクラスごとに分ける・・・。