アフィリエイト広告を利用しています

広告

posted by fanblog

2018年01月16日

《その239》 論理エラークラス


 論理エラークラス

 論理エラーは、論理的な誤りに対するエラーで、プログラムの実行前に検出が可能であり、本来は、事前に回避されるべきエラーです。

 論理エラークラスには、
  logic_errorクラス
と、このクラスから public派生した
  (1) domain_errorクラス
  (2) invalid_argumentクラス
  (3) length_errorクラス
  (4) out_of_rangeクラス
があります。



 logic_errorクラス

 logic_errorクラスは、exceptionクラスから直接派生したクラスです。
このクラスは、プログラム実行前に検出可能な論理エラーを通知するために提供される例外群の、基底クラスとして用いられます。
 以下は、定義例です。

class logic_error : public exception {
public:
explicit logic_error(const string& message);
explicit logic_error(const char *message);
};

※ デフォルトコンストラクタがないので、クラスオブジェクトを作成する際には、引数が必要です。
※ コンストラクタは explicit 付きなので、「 =形式 」で起動することはできません。

 以下は利用例です。

#include <iostream>
using namespace std;

int main()
{
try {
throw logic_error("logic error!!");
}
catch (exception &e) {
cout << e.what() << '\n';
};
}

f08_0071.png



 (1) domain_errorクラス

 domain_errorクラスは、logic_errorクラスから派生したクラスです。
このクラスは、ドメインエラーを通知するための例外クラス群の、基底クラスとして機能します。
 以下は、定義例です。

class domain_error : public logic_error {
public:
explicit domain_error(const string& message);
explicit domain_error(const char *message);
};


 以下は利用例です。

#include <iostream>
using namespace std;

int main()
{
try {
throw domain_error("ドメインエラー!!");
}
catch (exception &e) {
cout << "e.what() : " << e.what() << '\n';
cout << "typeid(e).name() : " << typeid(e).name() << '\n';
};
}

f08_0072.png



 (2) invalid_argumentクラス

 invalid_argumentクラスは、logic_errorクラスから派生したクラスです。
このクラスは、無効な引数を通知するための例外クラス群の、基底クラスとして機能します。
 以下は、定義例です。

class invalid_argument : public logic_error {
public:
explicit invalid_argument(const string& message);
explicit invalid_argument(const char *message);
};


 以下は利用例です。

#include <bitset>
#include <iostream>
using namespace std;

int main() {
try {
cout << "◆1. ";
bitset<8> b1(string("01100110"));
cout << b1 << '\n';

cout << "◆2. ";
bitset<8> b2(string("01100112"));
cout << b2 << '\n';
}
catch (exception &e) {
cout << "e.what() : " << e.what() << '\n';
cout << "typeid(e).name() : " << typeid(e).name() << '\n';
};
}

f08_0073.png



 (3) length_errorクラス

 length_errorクラスは、logic_errorクラスから派生したクラスです。
このクラスは、生成を試みたオブジェクトが長すぎて指定できないことを通知するための例外クラス群の、基底クラスとして機能します。
 以下は、定義例です。

class length_error : public logic_error {
public:
explicit length_error(const string& message);
explicit length_error(const char *message);
};


 以下は利用例です。

#include <iostream>
using namespace std;

class Name {
string name;
public:
Name(string s) {
if (s.length() > 20) throw length_error("too long!!");
name = s;
}
};

int main()
{
try {
Name a11("Taiheimasu Sakurazaemon");
}
catch (exception &e) {
cout << "e.what() : " << e.what() << '\n';
cout << "typeid(e).name() : " << typeid(e).name() << '\n';
};
}

f08_0074.png



 (4) out_of_rangeクラス

 out_of_rangeクラスは、logic_errorクラスから派生したクラスです。
このクラスは、引数が有効範囲外であることを通知するための例外クラス群の、基底クラスとして機能します。
 以下は、定義例です。

class out_of_range : public logic_error {
public:
explicit out_of_range(const string& message);
explicit out_of_range(const char *message);
};


 以下は利用例です。

#include <string>
#include <iostream>

using namespace std;

int main() {
try {
string s1("abcde");
string s2("fgh");
s1.append(s2, 5, 3);
cout << s1 << endl;
}
catch (exception &e) {
cout << "e.what() : " << e.what() << '\n';
cout << "typeid(e).name() : " << typeid(e).name() << '\n';
}
}

f08_0075.png



この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/7205227
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。