例外処理で登場するtry{}文の実行とcatch{}文の実行はセットになっています

ソーラー「さて


最終コーナーに差し掛かりました


今日は


例外処理について学んでみましょう


例外処理のプログラムには


try{}文と


catch{}文が登場することになります


try{}文が実行されると


catch{}文が実行されるという仕組みになっています


それでは


実際に


例外処理のプログラムを観察してみましょう

👇


#include <iostream>


using namespace std;


int main() {


int a;


cout << "0を入力してね" << "\n";


cin >> a;


try {

if (a != 0)throw "のおおん";


}

//👆ここです😊


catch (char* err) {


cout << err <<"\n";

}

//👆ここです😊


return 0;


}



ビルド実行結果


0を入力してね

6(6を入力すると)

のおおん


ソーラー「このプログラムでは例外処理というものが行われています


try{}文の部分は


try {


if (a != 0)throw "のおおん";


}



catch{}文の部分は


catch (char* err) {


cout << err <<"\n";

}


となります


このプログラムでは


まず


cout << "0を入力してね" << "\n";


の実行により


コマンドプロンプト画面に


0を入力してね


が表示されます


次に


cin >> a;


が実行されると


コマンドプロンプト画面上で


何かをキーボードから入力するよう促されます


ここで


0でなく


6を入力したとします


すると


int型の変数aに


6が代入されることになりますね


すると

条件式

a != 0


が成立します(真の値1を持ちます)


すると


try {


if (a != 0)throw "のおおん";


}


の{}ブロックのなかの命令文


if (a != 0)throw "のおおん";


が実行されることになります


if (a != 0)throw "のおおん";


が実行されると


文字列データ "のおおん"



続くcatch{}文

👇

catch (char* err) {


cout << err <<"\n";


}



char* errに代入されることになります


char*型の変数 err



文字列データ "のおおん"が


throw(投げられた)


というわけです


すると


あるメモリに


文字列データ "のおおん"は格納されることになるのですが


その

文字列データ "のおおん"を格納している連続したメモリの


先頭のメモリのアドレスが


char*型のポインタ変数err


に格納されることになります


try{}文が実行されたときのみ


catch{}文が実行されることになるのですが


このプログラムの場合は


try{}文


つまり


if (a != 0)throw "のおおん";


が実行されることになったので


catch{}文


つまり


catch (char* err) {


cout << err <<"\n";

}


が実行されることになります


その結果


コマンドプロンプト画面に


のおおん


が表示されることになります


もし


キーボードから0が入力されて


int型の変数aに0が格納された場合は


a==0


が成立し


a !=0


が成立しないので(偽の値0をもつので)


try{}文


つまり


try{


if (a != 0)throw "のおおん";


}


が実行されることはないので


catch{}文


catch (char* err) {


cout << err <<"\n";

}


が実行されることはありません


ですので


コマンドプロンプト画面には


何も表示されないことになります


その時のプログラムはこちらです

👇

#include <iostream>


using namespace std;


int main() {


int a;


cout << "0を入力してね" << "\n";


cin >> a;


try {


if (a != 0)throw "のおおん";


}


catch (char* err) {


cout << err << "\n";

}


return 0;


}


ビルド実行結果


0を入力してね

0(0を入力しました)



ソーラー「このように


try{}文の実行とcatch{}文の実行はセットになっています


0以外の


文字が入力されるという


例外的なことが行われたとき


その例外的なことに対する処理が行われているというわけですね」





  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る