C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で例外はどのように機能しますか


C ++では、例外処理はランタイムエラーを処理するプロセスです。例外は、C++で実行時にスローされるイベントです。すべての例外は、std::exceptionクラスから派生します。処理可能なランタイムエラーです。例外を処理しない場合は、例外メッセージを出力してプログラムを終了します。

例外は、C ++標準では、プログラム内で使用できるクラスとして定義されています。親子クラス階層の配置を以下に示します-

C++で例外はどのように機能しますか

C++の一般的な例外クラスは-

です。 例外と説明
Sr.No。
1 std ::exception
これは、すべての標準C++例外の例外および親クラスです。
2 std ::bad_cast
これは、dynamic_castによってスローされる例外です。
3 std ::bad_exception
この例外は、C++プログラムで予期しない例外を処理するために使用されます。
4 std ::bad_alloc
それは一般的に新しいものによって投げられます。
5 std ::logic_failure
この例外は、コードを読み取ることで検出できます。
6 std ::runtime_error
この例外は、コードを読み取っても検出できません。
7 std ::bad_typeid
typeidによってスローされる例外です。

キーワード

例外処理には、try、catch、throwの3つのキーワードがあります。

ブロックを試す/キャッチする

C ++では、例外処理はtry/catchステートメントを使用して実行されます。例外が発生する可能性のあるコードは、Tryブロックで配置するために使用されます。キャッチブロックは、例外を処理するために使用されます。

サンプルコード

#include <iostream>
using namespace std;
class Sample1 {
   public:
      Sample1() {
         cout << "Construct an Object of sample1" << endl;
      }
      ~Sample1() {
         cout << "Destruct an Object of sample1" << endl;
      }
};
class Sample2 {
   public:
      Sample2() {
         int i=7;
         cout << "Construct an Object of sample2" << endl;
         throw i;
      }
      ~Sample2() {
         cout << "Destruct an Object of sample2" << endl;
      }
};
int main() {
   try {
      Sample1 s1;
      Sample2 s2;
   } catch(int i) {
         cout << "Caught " << i << endl;
   }
}

出力

Construct an Object of sample1
Construct an Object of sample2
Destruct an Object of sample1
Caught 7

ユーザー定義の例外

例外クラスの機能を継承してオーバーライドすることで、独自の例外を定義できます。

サンプルコード

#include <iostream>
#include <exception> using namespace std;
struct DivideByZero : public exception {
   const char * what () const throw () {
      return "My Exception";
   }
};
int main() {
   try {
      throw DivideByZero();
   } catch(DivideByZero& e) {
      cout << "Exception caught" << endl; cout << e.what() << endl;
   } catch(exception& e) {
   }
}

出力

Exception caught My Exception
what() = A public method provided by exception class and it has been overridden by all the child exception classes. It returns the cause of an exception.

  1. インライン変数はC++/ C ++ 17でどのように機能しますか?

    C ++では、関数にinlineキーワードを使用できます。 C ++ 17バージョンでは、インライン変数の概念が導入されました。 インライン変数は、複数の変換単位で定義できます。また、単一定義規則に従います。これが複数回定義されている場合、コンパイラはそれらすべてを最終プログラムの1つのオブジェクトにマージします。 C ++(C ++ 17バージョンより前)では、静的変数の値をクラスで直接初期化することはできません。クラスの外でそれらを定義する必要があります。 サンプルコード #include<iostream> using namespace std; class MyCla

  2. C++での例外処理の基本

    C ++では、例外処理はランタイムエラーを処理するプロセスです。例外は、C++で実行時にスローされるイベントです。すべての例外は、std::exceptionクラスから派生します。処理可能なランタイムエラーです。例外を処理しない場合は、例外メッセージを出力してプログラムを終了します。 例外は、C ++標準では、プログラム内で使用できるクラスとして定義されています。親子クラス階層の配置を以下に示します。 C++の一般的な例外クラスは次のとおりです。 例外 説明 std ::exception これは、すべての標準C++例外の例外および親クラスです。 std ::