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

広告

posted by fanblog

2018年01月13日

《その233》 exceptionクラス


 exceptionクラス

 exceptionクラスは、すべての例外型の基底クラスです。以下はその定義例です。

class exception {
public:
exception () throw();
exception (const exception&) throw();
exception& operator= (const exception&) throw();
virtual ~exception() throw();
virtual const char* what() const throw();
}


 仮想メンバ関数 what の返却値と、その返却値の型である const char* について、次のプログラムで確認してみます。
確認した内容は、プログラム中に、コメントとして書き加えました。

// ------------------------------------
#include <iostream>
using namespace std;

int main() {
exception e;

// 以下の4つのクラスは、class exception からの public派生
// です。
bad_exception bad_e;
bad_alloc bad_a;
bad_cast bad_c;
bad_typeid bad_t;

exception* p[] = { &e, &bad_e, &bad_a, &bad_c, &bad_t };

// 基底クラス exception へのポインタ型で、各派生クラスを
// 一括して指していますが、多相的クラスは自身の動的
// な型を知っているので、自身の what 関数を使って、
// それぞれ独自の値を返却します。
for (int i = 0; i < 5; i++) {
cout << p[i]->what() << '\n';
}

cout << "\nwhat関数の返却値型は "
<< typeid(e.what()).name() << "\n\n";
// what関数の返却値は char const* 型です。string型ではあ
// りません。

// exceptionクラスの定義例として、次のように書かれている
// ことが多いのですが、これによると what関数
// の返却値は const char* 型となっています。
//
// class exception {
// public:
// exception() throw();
// exception(const exception&) throw();
// exception& operator= (const exception&) throw();
// virtual ~exception() throw();
// virtual const char* what() const throw();
// };


cout << typeid(const char*).name() << "\n\n";
// 「 char const* 」 と出力されます。
// 「 const char* 」 は 「 char const* 」 と同じということの
// ようです。

// 今回の話とは関係ありませんが、「 char* const 」 は
// 上の2つとは違います。
cout << typeid(char* const).name() << '\n';
}
// ------------------------------------

f08_0061.png

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

お名前:

メールアドレス:


ホームページアドレス:

コメント:

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

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

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

 たまに、クリック お願いします 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日以上新しい記事の更新がないブログに表示されております。