アプリ版:「スタンプのみでお礼する」機能のリリースについて

C++で、例外処理としてtryがあるのですが、どういった使い方をするのでしょうか?
それと、catchも使い方がわかりません。
どなたか教えてください。
よろしくお願いします。

A 回答 (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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!