C++ Penanganan Pengecualian: Coba, Tangkap, lempar Contoh
Apa yang dimaksud dengan Penanganan Pengecualian C++?
Penanganan pengecualian di C++ memberi Anda cara menangani keadaan tak terduga seperti kesalahan runtime. Jadi setiap kali terjadi keadaan yang tidak terduga, kendali program ditransfer ke fungsi khusus yang dikenal sebagai penangan.
Untuk menangkap pengecualian, Anda menempatkan beberapa bagian kode di bawah pemeriksaan pengecualian. Bagian kode ditempatkan di dalam blok coba-tangkap.
Jika situasi luar biasa terjadi dalam bagian kode tersebut, pengecualian akan diberikan. Selanjutnya, pengendali pengecualian akan mengambil alih kendali program.
Jika tidak terjadi keadaan luar biasa, kode akan dijalankan secara normal. Para penangannya akan diabaikan.
Dalam C++ tutorialnya, Anda akan belajar:
Mengapa Penanganan Pengecualian?
Inilah alasan menggunakan Penanganan Pengecualian C++:
- Anda akan memisahkan kode penanganan kesalahan dari kode normal Anda. Kode akan lebih mudah dibaca dan dipelihara.
- Fungsi dapat menangani pengecualian yang dipilihnya. Sekalipun suatu fungsi memunculkan banyak pengecualian, ia hanya akan menangani beberapa saja. Penelepon akan menangani pengecualian yang tidak tertangkap.
Kata Kunci Penanganan Pengecualian
Penanganan pengecualian di C++ berputar di sekitar tiga kata kunci ini:
- melemparkan– ketika suatu program menemui masalah, program tersebut mengeluarkan pengecualian. Kata kunci throw membantu program melakukan lemparan.
- menangkap– sebuah program menggunakan pengendali pengecualian untuk menangkap pengecualian. Itu ditambahkan ke bagian program di mana Anda perlu menangani masalah tersebut. Itu dilakukan dengan menggunakan kata kunci catch.
- mencoba– blok try 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 dengan metode menggunakan kata kunci coba dan tangkap. Blok coba/tangkap harus mengelilingi kode yang mungkin memunculkan pengecualian. Kode seperti ini dikenal sebagai kode yang dilindungi.
Sintaksis
Try/catch mengambil 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 kita mempunyai satu pernyataan try, kita dapat mempunyai banyak pernyataan catch.
- ExceptionName adalah nama pengecualian yang akan ditangkap.
- Pengecualian1, pengecualian2, dan pengecualianN adalah nama yang Anda tetapkan untuk merujuk pada pengecualian.
Contoh 1:
#include<iostream> #include<vector> using namespace std; int main() { vector<int> vec; vec.push_back(0); vec.push_back(1); // access the third element, which doesn't exist try { vec.at(2); } catch (exception& ex) { cout << "Exception occurred!" << endl; } return 0; }
Keluaran:
Berikut ini tangkapan layar kodenya:
Penjelasan Kode:
- Sertakan file header iostream dalam program untuk menggunakannya fungsi.
- Sertakan file header vektor dalam program untuk menggunakan fungsinya.
- Sertakan namespace std dalam program ke kelasnya tanpa memanggilnya.
- Panggil fungsi main(). Logika program harus ditambahkan di dalam tubuhnya.
- Buat vektor bernama vec untuk menyimpan data integer.
- Tambahkan elemen 0 ke vektor bernama vec.
- Tambahkan elemen 1 ke vektor bernama vec.
- Komentar. Itu akan dilewati oleh C++ penyusun.
- Gunakan pernyataan try untuk menangkap pengecualian. Tanda { menandai awal badan blok coba/tangkap. Kode yang ditambahkan di dalam isi akan menjadi kode yang dilindungi.
- Cobalah untuk mengakses elemen yang disimpan pada indeks 2 (elemen ketiga) dari vektor bernama vec. Elemen ini tidak ada.
- Akhir dari badan blok coba/tangkap.
- Tangkap pengecualiannya. Pesan kesalahan yang dikembalikan akan disimpan dalam variabel ex.
- Cetak beberapa pesan di konsol jika pengecualian tertangkap.
- Ujung badan blok penangkap.
- Program harus mengembalikan nilai setelah eksekusi berhasil.
- Akhir dari isi fungsi main().
Contoh 2:
#include <iostream> 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 ini tangkapan layar kodenya:
Penjelasan Kode:
- Sertakan file header iostream dalam program untuk menggunakan fungsinya.
- Sertakan namespace std dalam program ke kelasnya tanpa memanggilnya.
- Buat fungsi bernama zeroDivision yang mengambil dua argumen integer, x, dan y. Fungsi tersebut harus mengembalikan hasil ganda.
- Gunakan pernyataan if untuk memeriksa apakah nilai argumen variabel y adalah 0. Tanda { menandai awal isi if.
- Pesan yang akan dikembalikan/dilempar jika y adalah 0.
- Akhir dari isi pernyataan if.
- Fungsi zeroDivision harus mengembalikan nilai x/y.
- Akhir dari isi fungsi zeroDivision.
- Panggil metode main(). Tanda { menandai awal dari metode ini.
- Deklarasikan variabel integer dan berikan nilai 11.
- Deklarasikan variabel integer b dan berikan nilai 0.
- Nyatakan variabel ganda c dan tetapkan nilai 0.
- Gunakan pernyataan try untuk menangkap pengecualian. Tanda { menandai awal badan blok coba/tangkap. Kode yang ditambahkan di dalam isi akan menjadi kode yang dilindungi.
- Panggil fungsi zeroDivision dan meneruskan ke argumen a dan b, yaitu 11 dan 0. Hasil operasi ini akan disimpan dalam variabel c.
- Cetak nilai variabel c di konsol.
- Akhir dari badan blok coba/tangkap.
- Tangkap pengecualiannya. Pesan kesalahan yang dikembalikan akan disimpan dalam pesan variabel.
- Cetak pesan kesalahan yang dikembalikan di konsol.
- Ujung badan blok penangkap.
- Program harus mengembalikan nilai setelah eksekusi berhasil.
- Akhir dari isi fungsi main().
C++ Pengecualian Standar
C++ dilengkapi dengan daftar pengecualian standar yang ditentukan dalam kelas. Hal ini dijelaskan di bawah ini:
Pengecualian | Uraian Teknis |
---|---|
std::pengecualian | Ini merupakan pengecualian dan kelas induk dari semua standar C++ pengecualian. |
std::bad_alloc | Pengecualian ini diberikan oleh kata kunci baru. |
std::bad_cast | Ini adalah pengecualian yang diberikan oleh Dynamic_cast. |
std::pengecualian_buruk | Perangkat yang berguna untuk menangani pengecualian tak terduga di C++ program. |
std::bad_typeid | Pengecualian diberikan oleh typeid. |
std::logika_kesalahan | Pengecualian ini secara teori dapat dideteksi dengan membaca kode. |
std::domain_error | Ini adalah pengecualian yang diberikan setelah menggunakan domain yang secara matematis tidak valid. |
std::argumen_tidak valid | Pengecualian diberikan karena menggunakan argumen yang tidak valid. |
std::panjang_kesalahan | Pengecualian muncul setelah membuat std::string besar. |
std::diluar_jangkauan | Dilemparkan dengan metode. |
std::runtime_error | Ini adalah pengecualian yang tidak dapat dideteksi melalui pembacaan kode. |
std::overflow_error | Pengecualian ini muncul setelah terjadinya overflow matematis. |
std::range_error | Pengecualian ini terjadi ketika Anda mencoba menyimpan nilai di luar jangkauan. |
std::underflow_error | Pengecualian muncul setelah terjadinya kekurangan matematika. |
Pengecualian Buatan Pengguna
C++ std::kelas pengecualian memungkinkan kita untuk mendefinisikan objek yang dapat dilempar sebagai pengecualian. Kelas ini telah didefinisikan di tajuk. Kelas memberi kita fungsi anggota virtual bernama apa.
Fungsi ini mengembalikan urutan karakter tipe char * yang diakhiri dengan null. Kita dapat menimpanya di kelas turunan untuk mendapatkan deskripsi pengecualian.
Contoh:
#include <iostream> #include <exception> 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 ini tangkapan layar kodenya:
Penjelasan Kode:
- Sertakan file header iostream dalam program kami. Kami akan menggunakan fungsinya tanpa mendapatkan kesalahan.
- Sertakan file header pengecualian dalam program kami. Kami akan menggunakan fungsinya seperti apa tanpa kesalahan.
- Sertakan namespace std dalam program kami untuk menggunakan kelasnya tanpa memanggilnya.
- Buat kelas baru bernama newException. Kelas ini mewarisi kelas pengecualian C++.
- Awal dari badan kelas.
- Timpa fungsi anggota virtual apa() yang didefinisikan dalam file header pengecualian. Kami kemudian akan menjelaskan pengecualian kami sendiri, pengecualian baru.
- Mulai definisi pengecualian baru.
- Pesan yang akan dikembalikan jika pengecualian baru tertangkap.
- Akhir dari definisi pengecualian baru.
- Akhir dari badan kelas newException. Newex adalah nama yang akan digunakan untuk menangkap pengecualian baru kita, setelah itu newException akan dipanggil.
- Panggil fungsi main(). Logika program harus ditambahkan di dalam tubuhnya. Tanda { menandai awal dari tubuhnya.
- Gunakan pernyataan try untuk menandai kode yang di dalamnya kita perlu menandai pengecualiannya. Tanda { menandai awal badan blok coba/tangkap. Kode yang dikelilingi oleh ini akan dilindungi.
- Lemparkan pengecualian newex jika tertangkap.
- Akhir dari badan percobaan.
- Gunakan pernyataan catch untuk menangkap pengecualian. Pesan kesalahan pengecualian akan disimpan dalam variabel ex.
- Cetak pesan kesalahan pengecualian di konsol.
- Akhir dari isi pernyataan catch.
- Program harus mengembalikan nilai jika berhasil dijalankan.
- Akhir dari isi fungsi main().
Ringkasan
- Dengan pengecualian penanganan di C++, Anda dapat menangani kesalahan runtime.
- Runtime error adalah kesalahan yang terjadi selama eksekusi program.
- Penanganan pengecualian membantu Anda menangani keadaan tak terduga dalam program Anda.
- Ketika keadaan yang tidak terduga terjadi, kendali program ditransfer ke penangan.
- Untuk menangkap pengecualian, Anda menempatkan bagian kode di bawah blok coba-tangkap.
- Kata kunci throw membantu program mengeluarkan pengecualian, membantu program menangani masalah.
- Kata kunci try membantu mengidentifikasi blok kode yang pengecualian tertentu akan diaktifkan.
- Kita dapat menimpa fungsi what() dari file header pengecualian untuk menentukan pengecualian kita.