- 締切済み
C++のtryとcatch
C++で、例外処理としてtryがあるのですが、どういった使い方をするのでしょうか? それと、catchも使い方がわかりません。 どなたか教えてください。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- a-kuma
- ベストアンサー率50% (1122/2211)
「例外」自体が分からない、ということでしょうか、それとも「例外」はなんとなく 理解しているが、try と catch が分からないんでしょうか。 例外とは、その名の通り、こんなはずではなかった、ということを表すものです。 つまり、予期せず起こるものです。 でも、例外が起きたときの対処は、それぞれに対して1対1で対処法があると いうよりは、細かいことは気にせずまとめて処理できることの方が多いです。 「こんなはずではなかった!」というときには、例外を *投げます* (throw)。 投げられた例外は、例外の後始末をする誰かが *受け取ります* (catch) 。 例外を受け取るために、範囲が指定できます。例外が起きるかどうか試してみる という意味で try というブロックがあります。 例外は概念で、例外の実体にはクラスを指定できます。 下に示すプログラムは、ふたつ数字を入力して割り算をした結果を表示する ものです。0では割れませんから、そのときは例外としています。雰囲気が 分かるでしょうか? #include <iostream.h> class ExceptionDivideByZero { private: int x_, y_; public: ExceptionDivideByZero(int x, int y) : x_(x), y_(y) {} void printMessage(); }; void ExceptionDivideByZero::printMessage() { cout << "Divide By Zero. " << x_ << " / " << y_ << endl; } int divide_number(int a, int b) { if (b == 0) { throw ExceptionDivideByZero(a, b); } return a / b; } int main() { int a, b, c; try { cerr << "a: "; cin >> a; cerr << "b: "; cin >> b; c = divide_number(a, b); cout << "a / b = " << c << endl; } catch (ExceptionDivideByZero ex) { ex.printMessage(); } return 0; } ★実行結果 $ prog a: 4 b: 2 a / b = 2 $ prog a: 5 b: 0 Divide By Zero. 5 / 0 # 「伝わるかな~」という意味で自信無しにしておきます