C++で例外はどのように機能しますか
C ++では、例外処理はランタイムエラーを処理するプロセスです。例外は、C++で実行時にスローされるイベントです。すべての例外は、std::exceptionクラスから派生します。処理可能なランタイムエラーです。例外を処理しない場合は、例外メッセージを出力してプログラムを終了します。
例外は、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.
-
インライン変数はC++/ C ++ 17でどのように機能しますか?
C ++では、関数にinlineキーワードを使用できます。 C ++ 17バージョンでは、インライン変数の概念が導入されました。 インライン変数は、複数の変換単位で定義できます。また、単一定義規則に従います。これが複数回定義されている場合、コンパイラはそれらすべてを最終プログラムの1つのオブジェクトにマージします。 C ++(C ++ 17バージョンより前)では、静的変数の値をクラスで直接初期化することはできません。クラスの外でそれらを定義する必要があります。 サンプルコード #include<iostream> using namespace std; class MyCla
-
C++での例外処理の基本
C ++では、例外処理はランタイムエラーを処理するプロセスです。例外は、C++で実行時にスローされるイベントです。すべての例外は、std::exceptionクラスから派生します。処理可能なランタイムエラーです。例外を処理しない場合は、例外メッセージを出力してプログラムを終了します。 例外は、C ++標準では、プログラム内で使用できるクラスとして定義されています。親子クラス階層の配置を以下に示します。 C++の一般的な例外クラスは次のとおりです。 例外 説明 std ::exception これは、すべての標準C++例外の例外および親クラスです。 std ::