Apakah Pengendalian Pengecualian di C ++?
Pengendalian pengecualian di C ++ memberikan anda cara menangani keadaan yang tidak dijangka seperti kesalahan waktu berjalan. Oleh itu, setiap kali keadaan tidak dijangka berlaku, kawalan program dipindahkan ke fungsi khas yang dikenali sebagai pengendali.
Untuk mengetahui pengecualian, anda meletakkan beberapa bahagian kod di bawah pemeriksaan pengecualian. Bahagian kod diletakkan di dalam blok try-catch.
Sekiranya keadaan luar biasa berlaku di bahagian kod tersebut, pengecualian akan dilemparkan. Seterusnya, pengendali pengecualian akan mengambil alih kawalan program.
Sekiranya tidak ada keadaan luar biasa, kod tersebut akan berjalan normal. Penangan akan diabaikan.
Dalam tutorial C ++ ini, anda akan belajar:
- Apakah Pengendalian Pengecualian di C ++?
- Mengapa Pengendalian Pengecualian?
- Kata Kunci Pengendalian Pengecualian
- Sintaks:
- Pengecualian Standard C ++
- Pengecualian Yang Ditetapkan Pengguna
Mengapa Pengendalian Pengecualian?
Berikut adalah sebab untuk menggunakan Pengecualian Pengendalian dalam C ++:
- Anda akan memisahkan kod pengendalian ralat dari kod biasa anda. Kodnya akan lebih mudah dibaca dan lebih senang dijaga.
- Fungsi dapat mengatasi pengecualian yang mereka pilih. Walaupun fungsi membuang banyak pengecualian, ia hanya akan mengendalikan beberapa pengecualian. Pemanggil akan menangani pengecualian yang tidak dapat ditanggung.
Kata Kunci Pengendalian Pengecualian
Pengendalian pengecualian dalam C ++ berkisar pada tiga kata kunci berikut:
- lempar - apabila program menghadapi masalah, ia membuang pengecualian. Kata kunci lontaran membantu program melakukan lontaran.
- catch - program menggunakan pengendali pengecualian untuk menangkap pengecualian. Ia ditambahkan ke bahagian program di mana anda perlu menangani masalah tersebut. Ia dilakukan dengan menggunakan kata kunci tangkapan.
- cuba - blok cuba mengenal pasti blok kod yang pengecualian tertentu akan diaktifkan. Ia harus diikuti oleh satu / lebih blok tangkapan.
Katakan sekatan kod akan menimbulkan pengecualian. Pengecualian akan diambil dengan kaedah menggunakan kata kunci try and catch. Blok cubaan / tangkapan harus mengelilingi kod yang boleh menyebabkan pengecualian. Kod sedemikian dikenali sebagai kod terlindung.
Sintaks:
Cubaan / tangkapan 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}
- Walaupun kita mempunyai satu pernyataan percubaan, kita dapat memiliki banyak pernyataan tangkapan.
- ExceptionName adalah nama pengecualian yang akan ditangkap.
- Pengecualian1, pengecualian2, dan pengecualianN adalah nama yang ditentukan untuk merujuk kepada pengecualian.
Contoh 1:
#include#include using 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;}
Pengeluaran:
Berikut adalah tangkapan skrin kod:
Penjelasan Kod:
- Sertakan fail header iostream dalam program untuk menggunakan fungsinya.
- Sertakan fail tajuk vektor dalam program untuk menggunakan fungsinya.
- Sertakan ruang nama std dalam program ke kelasnya tanpa memanggilnya.
- Panggil fungsi utama (). Logik program harus ditambahkan dalam badannya.
- Buat vektor bernama vec untuk menyimpan data integer.
- Tambahkan elemen 0 ke vektor bernama vec.
- Tambahkan elemen 1 ke vektor bernama vec.
- Satu komen. Ia akan dilangkau oleh penyusun C ++.
- Gunakan pernyataan cuba untuk mendapatkan pengecualian. {Menandakan permulaan badan blok cubaan / tangkapan. Kod yang ditambahkan di dalam badan akan menjadi kod yang dilindungi.
- Cuba akses elemen yang tersimpan di indeks 2 (elemen ketiga) vektor bernama vec. Elemen ini tidak wujud.
- Hujung badan blok cubaan / tangkapan.
- Dapatkan pengecualian. Mesej ralat yang dikembalikan akan disimpan dalam pemboleh ubah ex.
- Cetak beberapa mesej di konsol sekiranya pengecualian tersekat.
- Hujung badan blok tangkapan.
- Program harus mengembalikan nilai setelah pelaksanaan berjaya.
- Akhir badan fungsi utama ().
Contoh 2:
#includeusing 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;}
Pengeluaran:
Berikut adalah tangkapan skrin kod:
Penjelasan Kod:
- Sertakan fail header iostream dalam program untuk menggunakan fungsinya.
- Sertakan ruang nama std dalam program ke kelasnya tanpa memanggilnya.
- Buat fungsi bernama zeroDivision yang mengambil dua argumen integer, x, dan y. Fungsi harus menghasilkan hasil berganda.
- Gunakan pernyataan if untuk memeriksa sama ada nilai argumen pemboleh ubah y ialah 0. {menandakan permulaan jika badan.
- Mesej yang akan dikembalikan / dilemparkan jika y adalah 0.
- Akhir badan penyataan if.
- Fungsi zeroDivision harus mengembalikan nilai x / y.
- Bahagian akhir fungsi zeroDivision.
- Panggil kaedah utama (). {Menandakan permulaan kaedah ini.
- Menyatakan pembolehubah integer dan memberikannya nilai 11.
- Menyatakan pembolehubah integer b dan memberikannya nilai 0.
- Menyatakan pemboleh ubah berganda c dan memberikannya nilai 0.
- Gunakan pernyataan cuba untuk mendapatkan pengecualian. {Menandakan permulaan badan blok cubaan / tangkapan. Kod yang ditambahkan di dalam badan akan menjadi kod yang dilindungi.
- Panggil fungsi zeroDivision dan sampaikan ke argumen a dan b, iaitu 11 dan 0. Hasil operasi ini akan disimpan dalam pemboleh ubah c.
- Cetak nilai pemboleh ubah c pada konsol.
- Hujung badan blok cubaan / tangkapan.
- Dapatkan pengecualian. Mesej ralat yang dikembalikan akan disimpan dalam mesej pemboleh ubah.
- Cetak mesej ralat yang dikembalikan pada konsol.
- Hujung badan blok tangkapan.
- Program harus mengembalikan nilai setelah pelaksanaan berjaya.
- Akhir badan fungsi utama ().
Pengecualian Standard C ++
C ++ dilengkapi dengan senarai pengecualian standard yang ditentukan dalam kelas
Pengecualian | Penerangan |
std :: pengecualian | Ini adalah pengecualian dan kelas induk semua pengecualian C ++ standard. |
std :: bad_alloc | Pengecualian ini dilemparkan dengan kata kunci baru. |
std :: bad_cast | Ini adalah pengecualian yang dilontarkan oleh dynamic_cast. |
std :: bad_exception | Peranti yang berguna untuk menangani pengecualian yang tidak dijangka dalam program C ++. |
std :: bad_typeid | Pengecualian yang dilontarkan oleh typeid. |
std :: logic_error | Pengecualian ini secara teorinya dapat dikesan dengan membaca kod. |
std :: domain_error | Ini adalah pengecualian yang dilemparkan setelah menggunakan domain yang tidak matematik. |
std :: valid_argument | Pengecualian dilemparkan kerana menggunakan argumen yang tidak sah. |
std :: length_error | Pengecualian dilemparkan setelah membuat rentetan std :: besar. |
std :: out_of_range | Dibuang oleh kaedah. |
std :: runtime_error | Ini adalah pengecualian yang tidak dapat dikesan dengan membaca kodnya. |
std :: overflow_error | Pengecualian ini dilemparkan setelah berlakunya limpahan matematik. |
std :: range_error | Pengecualian ini dilemparkan semasa anda berusaha menyimpan nilai di luar jangkauan. |
std :: underflow_error | Pengecualian dilemparkan setelah berlakunya aliran masuk matematik. |
Pengecualian Yang Ditetapkan Pengguna
Kelas pengecualian C ++ std :: membolehkan kita menentukan objek yang boleh dilemparkan sebagai pengecualian. Kelas ini telah ditentukan dalam tajuk
Fungsi ini mengembalikan urutan watak yang diakhiri nol dari jenis char *. Kita boleh menimpanya di kelas turunan untuk mempunyai keterangan 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;}
Pengeluaran:
Berikut adalah tangkapan skrin kod:
Penjelasan Kod:
- Sertakan fail header iostream dalam program kami. Kami akan menggunakan fungsinya tanpa mendapat kesilapan.
- Sertakan fail header pengecualian dalam program kami. Kami akan menggunakan fungsinya seperti apa tanpa kesalahan.
- Sertakan ruang nama std dalam program kami untuk menggunakan kelasnya tanpa memanggilnya.
- Buat kelas baru bernama newException. Kelas ini mewarisi kelas pengecualian C ++.
- Permulaan badan kelas.
- Menimpa fungsi anggota maya apa () yang ditentukan dalam fail pengecualian pengecualian. Kami kemudian akan menerangkan pengecualian kami sendiri, pengecualian baru.
- Mulakan definisi pengecualian baru.
- Mesej yang akan dikembalikan sekiranya pengecualian baru ditangkap.
- Akhir definisi pengecualian baru.
- Akhir badan kelas baruException. Newex adalah nama yang akan digunakan untuk menangkap pengecualian baru kami, selepas itu newException akan dipanggil.
- Panggil fungsi utama (). Logik program harus ditambahkan dalam badannya. {Menandakan permulaan tubuhnya.
- Gunakan pernyataan cuba untuk menandakan kod di mana kita perlu menandakan pengecualian. {Menandakan permulaan badan blok cubaan / tangkapan. Kod yang dikelilingi oleh ini akan dilindungi.
- Buangkan pengecualian newex jika tertangkap.
- Akhir badan mencuba.
- Gunakan pernyataan tangkapan untuk mendapatkan pengecualian. Mesej ralat pengecualian akan disimpan dalam pemboleh ubah ex.
- Cetak mesej ralat pengecualian pada konsol.
- Akhir pernyataan tangkapan.
- Program harus mengembalikan nilai jika berjaya dilaksanakan.
- Akhir badan utama () fungsi.
Ringkasan:
- Dengan pengecualian pengendalian dalam C ++, anda dapat mengatasi kesalahan runtime.
- Kesalahan masa jalan adalah kesalahan yang berlaku semasa pelaksanaan program.
- Pengendalian pengecualian membantu anda menangani keadaan yang tidak dijangka dalam program anda.
- Apabila keadaan tidak dijangka berlaku, kawalan program dipindahkan ke pengendali.
- Untuk mendapatkan pengecualian, anda meletakkan bahagian kod di bawah blok cubaan tangkapan.
- Kata kunci lontaran membantu pengecualian program, membantu program menangani masalah.
- Kata kunci cuba membantu mengenal pasti blok kod yang pengecualian tertentu akan diaktifkan.
- Kita boleh menimpa fungsi apa () dari fail pengecualian untuk menentukan pengecualian kita.