Penanganan pengecualian di C++ memberi Anda cara menangani keadaan tak terduga seperti kesalahan runtime. Jadi setiap kali keadaan tak terduga terjadi, kontrol program ditransfer ke fungsi khusus yang dikenal sebagai handler.
Untuk menangkap pengecualian, Anda menempatkan beberapa bagian kode di bawah pemeriksaan pengecualian. Bagian kode ditempatkan di dalam blok try-catch.
Jika situasi luar biasa terjadi dalam bagian kode itu, pengecualian akan dilemparkan. Selanjutnya, exception handler akan mengambil alih kendali program.
Jika tidak ada keadaan luar biasa yang terjadi, kode akan dijalankan secara normal. Para penangan akan diabaikan.
Dalam tutorial C++ ini, Anda akan belajar:
Apa itu Penanganan Pengecualian di C++?
Mengapa Penanganan Pengecualian?
Kata Kunci Penanganan Pengecualian
Sintaks:
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 dirawat.
Fungsi dapat menangani pengecualian yang mereka pilih. Bahkan jika suatu fungsi melempar 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 ini:
melempar – ketika sebuah program menemui masalah, ia melempar pengecualian. Kata kunci lemparan membantu program melakukan lemparan.
menangkap – sebuah program menggunakan penangan pengecualian untuk menangkap pengecualian. Itu ditambahkan ke bagian program di mana Anda perlu menangani masalah. Itu dilakukan dengan menggunakan kata kunci catch.
coba – blok coba mengidentifikasi blok kode yang pengecualian tertentu akan diaktifkan. Itu harus diikuti oleh satu/lebih blok tangkapan.
Misalkan blok kode akan memunculkan pengecualian. Pengecualian akan ditangkap oleh metode menggunakan kata kunci coba dan tangkap. Blok coba/tangkap harus mengelilingi kode yang mungkin menimbulkan pengecualian. Kode tersebut dikenal sebagai kode yang dilindungi.
Meskipun kita memiliki satu pernyataan try, kita dapat memiliki banyak pernyataan catch.
Nama Pengecualian adalah nama pengecualian yang akan ditangkap.
Pengecualian1, pengecualian2, dan pengecualianN adalah nama yang Anda tetapkan untuk merujuk ke 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 adalah screenshot kodenya:
Penjelasan Kode:
Sertakan file header iostream dalam program untuk menggunakan fungsinya.
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 sebuah vektor bernama vec untuk menyimpan data integer.
Tambahkan elemen 0 ke vektor bernama vec.
Tambahkan elemen 1 ke vektor bernama vec.
Komentar. Ini akan dilewati oleh kompiler C++.
Gunakan pernyataan try untuk menangkap pengecualian. { menandai awal dari isi blok try/catch. Kode yang ditambahkan di dalam tubuh akan menjadi kode yang dilindungi.
Coba akses elemen yang disimpan pada indeks 2 (elemen ketiga) dari vektor bernama vec. Elemen ini tidak ada.
Akhir dari isi blok try/catch.
Tangkap pengecualian. Pesan kesalahan yang dikembalikan akan disimpan dalam variabel ex.
Cetak beberapa pesan di konsol jika pengecualian tertangkap.
Akhir dari badan blok tangkapan.
Program harus mengembalikan nilai setelah eksekusi berhasil.
Akhir dari badan 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 adalah screenshot 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 harus mengembalikan hasil ganda.
Gunakan pernyataan if untuk memeriksa apakah nilai argumen variabel y adalah 0. { menandai awal dari badan 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(). { menandai awal dari metode ini.
Deklarasikan variabel integer dan beri nilai 11.
Deklarasikan variabel integer b dan beri nilai 0.
Deklarasikan variabel ganda c dan beri nilai 0.
Gunakan pernyataan try untuk menangkap pengecualian. { menandai awal dari isi blok try/catch. Kode yang ditambahkan di dalam tubuh 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 isi blok try/catch.
Tangkap pengecualian. Pesan kesalahan yang dikembalikan akan disimpan dalam pesan variabel.
Cetak pesan kesalahan yang dikembalikan di konsol.
Akhir dari badan blok tangkapan.
Program harus mengembalikan nilai setelah eksekusi berhasil.
Akhir dari badan fungsi main().
Pengecualian Standar C++
C++ hadir dengan daftar pengecualian standar yang didefinisikan dalam kelas . Ini dijelaskan di bawah ini:
Pengecualian
Deskripsi
std::exceptionIni adalah pengecualian dan kelas induk dari semua pengecualian C++ standar.std::bad_allocPengecualian ini dilontarkan oleh kata kunci baru.std::bad_castIni adalah pengecualian yang dilemparkan oleh dynamic_cast.std::bad_exceptionPerangkat yang berguna untuk menangani pengecualian tak terduga pada program C++ .std::length_errorPengecualian dilemparkan setelah membuat std::string.std::out_of_rangeDilemparkan oleh di method.std::runtime_errorIni adalah pengecualian yang tidak dapat dideteksi dengan membaca kode.std::overflow_errorPengecualian ini dilempar setelah kejadian dari overflow.std matematis::range_errorPengecualian ini dilempar ketika Anda mencoba untuk menyimpan nilai di luar jangkauan.std::underflow_errorPengecualian yang dilemparkan setelah kemunculan m aliran bawah matematis.
Pengecualian Buatan Pengguna
Kelas C++ std::exception memungkinkan kita untuk mendefinisikan objek yang dapat dilempar sebagai pengecualian. Kelas ini telah didefinisikan di header . Kelas memberi kita fungsi anggota virtual bernama apa.
Fungsi ini mengembalikan urutan karakter yang diakhiri dengan null dari tipe char *. Kita bisa menimpanya di kelas turunan untuk memiliki deskripsi pengecualian.
Sertakan file header iostream dalam program kami. Kami akan menggunakan fungsinya tanpa mendapatkan kesalahan.
Sertakan file header pengecualian dalam program kami. Kita akan menggunakan fungsinya seperti apa tanpa error.
Sertakan ruang nama std dalam program kami untuk menggunakan kelasnya tanpa memanggilnya.
Buat kelas baru bernama newException. Kelas ini mewarisi kelas pengecualian C++.
Awal badan kelas.
Timpa fungsi anggota virtual what() 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 isi kelas newException. Newex adalah nama yang akan digunakan untuk menangkap pengecualian baru kami, setelah itu newException akan dipanggil.
Panggil fungsi main(). Logika program harus ditambahkan di dalam tubuhnya. { menandai awal dari tubuhnya.
Gunakan pernyataan try untuk menandai kode di mana kita perlu menandai pengecualian. { menandai awal dari isi blok try/catch. Kode yang dikelilingi oleh ini akan menjadi terlindungi.
Buang pengecualian newex jika ketahuan.
Akhir dari badan percobaan.
Gunakan pernyataan catch untuk menangkap pengecualian. Pesan error exception 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 penanganan pengecualian di C++, Anda dapat menangani kesalahan runtime.
Kesalahan runtime adalah kesalahan yang terjadi selama eksekusi program.
Penanganan pengecualian membantu Anda menangani keadaan tak terduga dalam program Anda.
Ketika keadaan tak terduga terjadi, kontrol program ditransfer ke penangan.
Untuk menangkap pengecualian, Anda menempatkan bagian kode di bawah blok try-catch.
Kata kunci throw membantu program melempar 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 mendefinisikan pengecualian kita.