OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

C++のtryとcatch

  • すぐに回答を!
  • 質問No.188253
  • 閲覧数335
  • ありがとう数4
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 0% (0/1)

C++で、例外処理としてtryがあるのですが、どういった使い方をするのでしょうか?
それと、catchも使い方がわかりません。
どなたか教えてください。
よろしくお願いします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全1件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

「例外」自体が分からない、ということでしょうか、それとも「例外」はなんとなく 理解しているが、try と catch が分からないんでしょうか。 例外とは、その名の通り、こんなはずではなかった、ということを表すものです。 つまり、予期せず起こるものです。 でも、例外が起きたときの対処は、それぞれに対して1対1で対処法があると いうよりは、細かいことは気にせずまとめて処理できることの方が多 ...続きを読む
「例外」自体が分からない、ということでしょうか、それとも「例外」はなんとなく
理解しているが、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

# 「伝わるかな~」という意味で自信無しにしておきます


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ