2018年01月17日
《その240》 実行時エラークラス
実行時エラークラス
実行時エラーは、プログラムを実行してみないと検出できないような、実行前の予測が困難なエラーです。
実行時エラークラスには、
runtime_errorクラス
と、このクラスから public派生した
(1) range_errorクラス
(2) overflow_errorクラス
(3) underflow_errorクラス
があります。
runtime_errorクラス
runtime_errorクラスは、exceptionクラスから直接派生したクラスです。
このクラスは、プログラム実行時にしか検出できないような実行時エラーを通知するために提供される例外群の、基底クラスとして用いられます。
以下は、定義例です。
class runtime_error : public exception {
public:
explicit runtime_error(const string& message);
explicit runtime_error(const char *message);
};
※ デフォルトコンストラクタがないので、クラスオブジェクトを作成する際には、引数が必要です。
※ コンストラクタは explicit 付きなので、「 =形式 」で起動することはできません。
以下は利用例です。
#include <iostream>
using namespace std;
int main()
{
try {
locale L("z");
}
catch (exception &e) {
cout << "e.what() : " << e.what() << '\n';
cout << "typeid(e).name() : " << typeid(e).name() << '\n';
};
}
(1) range_errorクラス
range_errorクラスは、runtime_errorクラスから派生したクラスです。
このクラスは、範囲のエラーを通知するための例外クラス群の、基底クラスとして機能します。
以下は、定義例です。
class range_error : public runtime_error {
public:
explicit range_error(const string& message);
explicit range_error(const char *message);
};
以下は利用例です。
#include <iostream>
using namespace std;
int main()
{
try {
throw range_error("range_error!!");
}
catch (exception &e) {
cout << "e.what() : " << e.what() << '\n';
cout << "typeid(e).name() : " << typeid(e).name() << '\n';
};
}
(2) overflow_errorクラス
overflow_errorクラスは、runtime_errorクラスから派生したクラスです。
このクラスは、算術オーバーフローエラーを通知するための例外クラス群の、基底クラスとして機能します。
以下は、定義例です。
class overflow_error : public runtime_error {
public:
explicit overflow_error(const string& message);
explicit overflow_error(const char *message);
};
以下は利用例です。
#include <bitset>
#include <iostream>
using namespace std;
int main()
{
try {
bitset<33> b;
b.set();
b.to_ulong();
}
catch (exception &e) {
cout << "e.what() : " << e.what() << '\n';
cout << "typeid(e).name() : " << typeid(e).name() << '\n';
};
}
(3) underflow_errorクラス
underflow_errorクラスは、runtime_errorクラスから派生したクラスです。
このクラスは、算術アンダーフローエラーを通知するための例外クラス群の、基底クラスとして機能します。
以下は、定義例です。
class underflow_error : public runtime_error {
public:
explicit underflow_error(const string& message);
explicit underflow_error(const char *message);
};
以下は利用例です。
#include <iostream>
using namespace std;
int main()
{
try {
throw underflow_error("underflow_error!!");
}
catch (exception &e) {
cout << "e.what() : " << e.what() << '\n';
cout << "typeid(e).name() : " << typeid(e).name() << '\n';
};
}
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7207213
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック