Penanganan Pengecualian C ++: Coba, Tangkap, lempar Contoh

Daftar Isi:

Anonim

Apa itu Exception Handling di C ++?

Penanganan pengecualian di C ++ memberi Anda cara untuk menangani keadaan yang tidak terduga seperti kesalahan waktu proses. Jadi setiap kali terjadi keadaan yang tidak terduga, kontrol program ditransfer ke fungsi khusus yang dikenal sebagai penangan.

Untuk menangkap pengecualian, Anda menempatkan beberapa bagian kode di bawah inspeksi pengecualian. Bagian kode ditempatkan di dalam blok coba-tangkap.

Jika situasi luar biasa terjadi dalam bagian kode itu, pengecualian akan dilemparkan. Selanjutnya, penangan pengecualian akan mengambil alih kendali program.

Jika tidak ada keadaan luar biasa yang terjadi, kode akan dijalankan secara normal. Penangan akan diabaikan.

Dalam tutorial C ++ ini, Anda akan mempelajari:

  • Apa itu Exception Handling di C ++?
  • Mengapa Penanganan Pengecualian?
  • Kata Kunci Penanganan Pengecualian
  • Sintaksis:
  • Pengecualian Standar C ++
  • Pengecualian Buatan Pengguna

Mengapa Penanganan Pengecualian?

Berikut, alasan penggunaan Exception Handling di C ++:

  • Anda akan memisahkan kode penanganan kesalahan dari kode normal Anda. Kode akan lebih mudah dibaca dan lebih mudah dikelola.
  • Fungsi dapat menangani pengecualian yang mereka pilih. Meskipun suatu fungsi memberikan banyak pengecualian, itu hanya akan menangani beberapa. Penelepon akan menangani pengecualian yang tidak tertangkap.

Kata Kunci Penanganan Pengecualian

Penanganan pengecualian di C ++ berkisar pada tiga kata kunci berikut:

  • throw - ketika sebuah program menemui masalah, ia mengeluarkan pengecualian. Kata kunci lemparan membantu program melakukan lemparan.
  • catch - program menggunakan penangan pengecualian untuk menangkap pengecualian. Itu ditambahkan ke bagian program di mana Anda perlu menangani masalah. Ini dilakukan dengan menggunakan kata kunci catch.
  • try - blok percobaan mengidentifikasi blok kode yang pengecualian tertentu akan diaktifkan. Ini harus diikuti oleh satu / lebih blok tangkapan.

Misalkan blok kode akan memunculkan pengecualian. Pengecualian akan ditangkap oleh metode yang menggunakan kata kunci coba dan tangkap. Blok coba / tangkap harus mengelilingi kode yang mungkin menimbulkan pengecualian. Kode tersebut dikenal sebagai kode yang dilindungi.

Sintaksis:

Coba / tangkap menggunakan sintaks ini:

try {// the protected code} catch( Exception_Name exception1 ) {// catch block} catch( Exception_Name exception2 ) {// catch block} catch( Exception_Name exceptionN ) {// catch block}
  • Meskipun kami memiliki satu pernyataan percobaan, kami dapat memiliki banyak pernyataan tangkap.
  • ExceptionName adalah nama pengecualian yang akan ditangkap.
  • Pengecualian1, pengecualian2, dan pengecualianN adalah nama yang Anda tentukan untuk merujuk ke pengecualian.

Contoh 1:

#include#includeusing namespace std;int main() {vector vec;vec.push_back(0);vec.push_back(1);// access the third element, which doesn't existtry{vec.at(2);}catch (exception& ex){cout << "Exception occurred!" << endl;}return 0;}

Keluaran:

Berikut tangkapan layar kodenya:

Penjelasan Kode:

  1. Sertakan file header iostream dalam program untuk menggunakan fungsinya.
  2. Sertakan file header vektor dalam program untuk menggunakan fungsinya.
  3. Sertakan namespace std dalam program ke kelasnya tanpa memanggilnya.
  4. Panggil fungsi main (). Logika program harus ditambahkan di dalam tubuhnya.
  5. Buat vektor bernama vec untuk menyimpan data integer.
  6. Tambahkan elemen 0 ke vektor bernama vec.
  7. Tambahkan elemen 1 ke vektor bernama vec.
  8. Komentar. Ini akan dilewati oleh compiler C ++.
  9. Gunakan pernyataan coba untuk menangkap pengecualian. {Menandai awal isi blok coba / tangkap. Kode yang ditambahkan ke dalam tubuh akan menjadi kode yang dilindungi.
  10. Cobalah untuk mengakses elemen yang disimpan pada indeks 2 (elemen ketiga) dari vektor bernama vec. Elemen ini tidak ada.
  11. Akhir dari blok coba / tangkap.
  12. Tangkap pengecualian. Pesan kesalahan yang dikembalikan akan disimpan dalam variabel ex.
  13. Cetak beberapa pesan di konsol jika pengecualiannya tertangkap.
  14. Ujung badan blok tangkapan.
  15. Program harus mengembalikan nilai setelah eksekusi berhasil.
  16. Akhir badan fungsi main ().

Contoh 2:

#include using namespace std;double zeroDivision(int x, int y) {if (y == 0) {throw "Division by Zero!";}return (x / y);}int main() {int a = 11;int b = 0;double c = 0;try {c = zeroDivision(a, b);cout << c << endl;}catch (const char* message) {cerr << message << endl;}return 0;}

Keluaran:

Berikut tangkapan layar kodenya:

Penjelasan Kode:

  1. Sertakan file header iostream dalam program untuk menggunakan fungsinya.
  2. Sertakan namespace std dalam program ke kelasnya tanpa memanggilnya.
  3. Buat fungsi bernama zeroDivision yang menggunakan dua argumen bilangan bulat, x, dan y. Fungsi tersebut harus mengembalikan hasil ganda.
  4. Gunakan pernyataan if untuk memeriksa apakah nilai argumen variabel y adalah 0. Tanda {menandai awal dari if body.
  5. Pesan yang akan dikembalikan / dibuang jika y adalah 0.
  6. Akhir isi pernyataan if.
  7. Fungsi zeroDivision harus mengembalikan nilai x / y.
  8. Akhir badan fungsi zeroDivision.
  9. Panggil metode main (). Tanda {menandai awal dari metode ini.
  10. Deklarasikan variabel integer dan berikan nilai 11.
  11. Deklarasikan variabel integer b dan berikan nilai 0.
  12. Deklarasikan variabel ganda c dan berikan nilai 0.
  13. Gunakan pernyataan coba untuk menangkap pengecualian. {Menandai awal isi blok coba / tangkap. Kode yang ditambahkan ke dalam tubuh akan menjadi kode yang dilindungi.
  14. Panggil fungsi zeroDivision dan meneruskan ke argumen a dan b, yaitu 11 dan 0. Hasil operasi ini akan disimpan dalam variabel c.
  15. Cetak nilai variabel c di konsol.
  16. Akhir dari blok coba / tangkap.
  17. Tangkap pengecualian. Pesan kesalahan yang dikembalikan akan disimpan dalam pesan variabel.
  18. Cetak pesan kesalahan yang dikembalikan di konsol.
  19. Ujung badan blok tangkapan.
  20. Program harus mengembalikan nilai setelah eksekusi berhasil.
  21. Akhir badan fungsi main ().

Pengecualian Standar C ++

C ++ hadir dengan daftar pengecualian standar yang ditentukan di kelas . Ini dijelaskan di bawah ini:

Pengecualian Deskripsi
std :: exception Ini adalah pengecualian dan kelas induk dari semua pengecualian C ++ standar.
std :: bad_alloc Pengecualian ini diberikan oleh kata kunci baru.
std :: bad_cast Ini adalah pengecualian yang diberikan oleh dynamic_cast.
std :: bad_exception Perangkat yang berguna untuk menangani pengecualian tak terduga dalam program C ++.
std :: bad_typeid Pengecualian diberikan oleh typeid.
std :: logic_error Pengecualian ini secara teoritis dapat dideteksi dengan membaca kode.
std :: domain_error Ini adalah pengecualian yang diberikan setelah menggunakan domain yang secara matematis tidak valid.
std :: invalid_argument Pengecualian diberikan karena menggunakan argumen yang tidak valid.
std :: length_error Pengecualian muncul setelah membuat string std :: yang besar.
std :: out_of_range Dilempar dengan metode.
std :: runtime_error Ini adalah pengecualian yang tidak dapat dideteksi dengan membaca kode.
std :: overflow_error Pengecualian ini dilemparkan setelah terjadinya luapan matematis.
std :: range_error Pengecualian ini muncul saat Anda mencoba menyimpan nilai di luar kisaran.
std :: underflow_error Pengecualian diberikan setelah terjadinya kekurangan aliran matematika.

Pengecualian Buatan Pengguna

Kelas C ++ std :: exception memungkinkan kita untuk mendefinisikan objek yang bisa dilempar sebagai pengecualian. Kelas ini telah ditentukan di header . Kelas memberi kita fungsi anggota virtual bernama apa.

Fungsi ini mengembalikan urutan karakter yang dihentikan null dari tipe char *. Kita dapat menimpanya di kelas turunan untuk mendapatkan deskripsi pengecualian.

Contoh:

#include #include using namespace std;class newException : public exception{virtual const char* what() const throw(){return "newException occurred";}} newex;int main() {try {throw newex;}catch (exception& ex) {cout << ex.what() << '\n';}return 0;}

Keluaran:

Berikut tangkapan layar kodenya:

Penjelasan Kode:

  1. Sertakan file header iostream dalam program kami. Kami akan menggunakan fungsinya tanpa mendapatkan kesalahan.
  2. Sertakan file header pengecualian dalam program kami. Kami akan menggunakan fungsinya seperti apa tanpa kesalahan.
  3. Sertakan namespace std dalam program kita untuk menggunakan kelasnya tanpa memanggilnya.
  4. Buat kelas baru bernama newException. Kelas ini mewarisi kelas pengecualian C ++.
  5. Awal dari badan kelas.
  6. Timpa fungsi anggota virtual apa () yang ditentukan di file header pengecualian. Kami kemudian akan menjelaskan pengecualian kami sendiri, pengecualian baru.
  7. Mulai definisi pengecualian baru.
  8. Pesan yang akan dikembalikan jika pengecualian baru tertangkap.
  9. Akhir definisi pengecualian baru.
  10. Akhir isi kelas newException. Newex adalah nama yang akan digunakan untuk menangkap pengecualian baru kami, setelah itu newException akan dipanggil.
  11. Panggil fungsi main (). Logika program harus ditambahkan di dalam tubuhnya. Tanda {menandai awal tubuhnya.
  12. Gunakan pernyataan percobaan untuk menandai kode di mana kita perlu menandai pengecualian. {Menandai awal isi blok coba / tangkap. Kode yang dikelilingi oleh ini akan dilindungi.
  13. Lempar pengecualian newex jika tertangkap.
  14. Akhir dari tubuh percobaan.
  15. Gunakan pernyataan catch untuk menangkap pengecualian. Pesan kesalahan pengecualian akan disimpan dalam variabel ex.
  16. Cetak pesan kesalahan pengecualian di konsol.
  17. Pernyataan akhir badan tangkapan.
  18. Program harus mengembalikan nilai jika berhasil dijalankan.
  19. Akhir badan fungsi main ().

Ringkasan:

  • Dengan penanganan pengecualian di C ++, Anda dapat menangani error runtime.
  • Kesalahan runtime adalah kesalahan yang terjadi selama eksekusi program.
  • Penanganan pengecualian membantu Anda menangani keadaan yang tidak terduga dalam program Anda.
  • Ketika keadaan tak terduga terjadi, kontrol program ditransfer ke penangan.
  • Untuk menangkap pengecualian, Anda menempatkan bagian kode di bawah blok coba-tangkap.
  • Kata kunci throw membantu program membuang pengecualian, membantu program menangani masalah.
  • Kata kunci try membantu mengidentifikasi blok kode yang pengecualian tertentu akan diaktifkan.
  • Kita bisa menimpa fungsi what () dari file header pengecualian untuk menentukan pengecualian kita.