Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

Menguasai Penanganan Pengecualian C++: Panduan Lengkap

Sebuah pengecualian adalah masalah yang timbul selama eksekusi program. Sebuah pengecualian C++ adalah respons terhadap keadaan ekstraordiner yang timbul saat program berjalan, seperti upaya pembagian dengan nol.

Pengecualian menyediakan cara untuk mentransfer kontrol dari satu bagian program ke bagian lain. Penanganan pengecualian C++ dibangun atas tiga kata kunci: try, catch, dan throw.

Asumsikan sebuah blok akan menghasilkan pengecualian, sebuah metode menangkap pengecualian menggunakan kombinasi kata kunci try dan catch. Blok try/catch ditempatkan di sekitar kode yang mungkin menghasilkan pengecualian. Kode dalam blok try/cash disebut sebagai kode terlindungi, dan sintaks untuk menggunakan try/catch sebagai berikut minus–

 try { // kode terlindungi } catch( ExceptionName e1 ) { // blok catch } catch( ExceptionName e2 ) { // blok catch } catch( ExceptionName eN ) { // blok catch } 

Anda dapat mencantumkan beberapa pernyataan catch untuk menangkap berbagai tipe pengecualian jika blok try Anda menghasilkan lebih dari satu pengecualian dalam situasi yang berbeda.

Melempar Pengecualian

Pengecualian dapat dilemparkan di mana saja dalam blok kode menggunakan pernyataan throw. Operand dari pernyataan throw menentukan tipe untuk pengecualian dan dapat berupa ekspresi apa pun dan tipe hasil dari ekspresi menentukan tipe pengecualian yang dilemparkan.

Berikut adalah contoh melempar pengecualian saat kondisi pembagian dengan nol terjadi minus–

 double division(int a, int b) { if( b == 0 ) { throw "Kondisi pembagian dengan nol!"; } return (a/b); } 

Menangkap Pengecualian

Blok catch setelah blok try menangkap pengecualian apa pun. Anda dapat menentukan tipe pengecualian apa yang ingin Anda tangkap dan ini ditentukan oleh deklarasi pengecualian yang muncul dalam kurung setelah kata kunci catch.

 try { // kode terlindungi } catch( ExceptionName e ) { // kode untuk menangani pengecualian ExceptionName } 

Kode di atas akan menangkap pengecualian tipe ExceptionName. Jika Anda ingin menentukan bahwa blok catch harus menangani tipe pengecualian apa pun yang dilemparkan dalam blok try, Anda harus menempatkan ellipsis, ..., di antara kurung yang mengapit deklarasi pengecualian sebagai berikut minus–

 try { // kode terlindungi } catch(...) { // kode untuk menangani pengecualian apa pun } 

Berikut adalah contoh, yang melempar pengecualian pembagian dengan nol dan kita tangkap dalam blok catch.

Live Demo
 #include <iostream> using namespace std; double division(int a, int b) { if( b == 0 ) { throw "Kondisi pembagian dengan nol!"; } return (a/b); } int main () { int x = 50; int y = 0; double z = 0; try { z = division(x, y); cout << z << endl; } catch (const char* msg) { cerr << msg << endl; } return 0; } 

Karena kita melempar pengecualian tipe const char*, jadi saat menangkap pengecualian ini, kita harus menggunakan const char* dalam blok catch. Jika kita mengompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil berikut minus–

 Kondisi pembagian dengan nol! 

Pengecualian Standar C++

C++ menyediakan daftar pengecualian standar yang didefinisikan dalam <exception> yang dapat kita gunakan dalam program kita. Ini diatur dalam hierarki kelas parent-child yang ditunjukkan di bawah minus–

Menguasai Penanganan Pengecualian C++: Panduan Lengkap

Berikut adalah deskripsi kecil dari setiap pengecualian yang disebutkan dalam hierarki di atas minus–

No.Urut Pengecualian & Deskripsi
1

std::exception

Sebuah pengecualian dan kelas induk dari semua pengecualian standar C++.

2

std::bad_alloc

Ini dapat dilemparkan oleh new.

3

std::bad_cast

Ini dapat dilemparkan oleh dynamic_cast.

4

std::bad_exception

Ini adalah perangkat yang berguna untuk menangani pengecualian yang tidak terduga dalam program C++.

5

std::bad_typeid

Ini dapat dilemparkan oleh typeid.

6

std::logic_error

Sebuah pengecualian yang secara teoritis dapat terdeteksi dengan membaca kode.

7

std::domain_error

Ini adalah pengecualian yang dilemparkan saat domain matematis yang tidak valid digunakan.

8

std::invalid_argument

Ini dilemparkan karena argumen yang tidak valid.

9

std::length_error

Ini dilemparkan saat std::string yang terlalu besar dibuat.

10

std::out_of_range

Ini dapat dilemparkan oleh metode 'at', misalnya std::vector dan std::bitset<>::operator[]().

11

std::runtime_error

Sebuah pengecualian yang secara teoritis tidak dapat terdeteksi dengan membaca kode.

12

std::overflow_error

Ini dilemparkan jika overflow matematis terjadi.

13

std::range_error

Ini terjadi saat Anda mencoba menyimpan nilai yang di luar rentang.

14

std::underflow_error

Ini dilemparkan jika underflow matematis terjadi.

Mendefinisikan Pengecualian Baru

Anda dapat mendefinisikan pengecualian Anda sendiri dengan mewarisi dan mengganti fungsionalitas kelas exception. Berikut adalah contoh, yang menunjukkan bagaimana Anda dapat menggunakan kelas std::exception untuk mengimplementasikan pengecualian Anda sendiri dengan cara standar minus–

Live Demo
 #include <iostream> #include <exception> using namespace std; struct MyException : public exception { const char * what () const throw () { return "Pengecualian C++"; } }; int main() { try { throw MyException(); } catch(MyException& e) { std::cout << "MyException ditangkap" << std::endl; std::cout << e.what() << std::endl; } catch(std::exception& e) { //Kesalahan lain } } 

Ini akan menghasilkan hasil berikut minus–

 MyException ditangkap Pengecualian C++ 

Di sini, what() adalah metode publik yang disediakan oleh kelas exception dan telah dioverride oleh semua kelas pengecualian anak. Ini mengembalikan penyebab dari sebuah pengecualian.


Bahasa C

  1. Menguasai Operator C++: Panduan Lengkap dengan Contoh Praktis
  2. Komentar C++: Praktik Terbaik untuk Kode yang Mudah Dibaca dan Dipelihara
  3. Menguasai Template Kelas C++: Panduan Praktis
  4. Penanganan File C: Menguasai I/O dengan fopen, fprintf, fread, dan fseek
  5. Menguasai Penanganan Pengecualian Java: Try, Catch, Finally, Throw & Throws Dijelaskan
  6. Menguasai Penanganan Pengecualian C++: Contoh Praktis Try, Catch, Throw
  7. Menguasai Penanganan Pengecualian Python: Menggunakan try, except, finally, dan raise Secara Efektif
  8. Menguasai Penanganan Kesalahan dalam C: Praktik Terbaik & Teknik
  9. Bahasa Pemrograman C++: Tinjauan & Fitur Utama
  10. Konstanta & Literal C++ Dijelaskan: Tipe, Sintaks, dan Praktik Terbaik