Pengecualian ialah konsep teras C++. Pengecualian berlaku apabila operasi yang tidak diingini atau mustahil berlaku semasa pelaksanaan. Mengendalikan operasi yang tidak diingini atau mustahil ini dalam C++ dipanggil pengendalian pengecualian. Pengendalian pengecualian terutamanya menggunakan tiga kata kunci khusus, iaitu 'cuba', 'tangkap' dan 'buang'. Kata kunci ‘try’ digunakan untuk melaksanakan kod yang mungkin menghadapi pengecualian, kata kunci ‘catch’ digunakan untuk mengendalikan pengecualian ini dan kata kunci ‘lempar’ digunakan untuk membuat pengecualian. Pengecualian dalam C++ boleh dibahagikan kepada dua jenis, iaitu pengecualian STL dan pengecualian yang ditentukan pengguna. Dalam artikel ini, kami memberi tumpuan kepada cara membuat pengecualian tersuai ini. Butiran lanjut mengenai pengendalian pengecualian boleh didapati di sini.
Pertama, kami melihat cara membuat pengecualian tersuai menggunakan satu kelas. Untuk melakukan ini, kita perlu menentukan kelas dan membuang pengecualian dari kelas itu.
//user-defined class class Test{}; try{ //throw object of that class throw Test(); } catch(Test t) { .... }
#include <iostream> using namespace std; //define a class class Test{}; int main() { try{ //throw object of that class throw Test(); } catch(Test t) { cout << "Caught exception 'Test'!" << endl; } return 0; }
Caught exception 'Test'!
‘cuba’ akan membuang pengecualian kelas itu, manakala blok ‘catch’ hanya akan menangkap pengecualian kelas tertentu itu. Jika terdapat dua kelas pengecualian yang ditentukan pengguna, ia mesti dikendalikan secara berasingan.
Prosesnya mudah, seperti yang dijangkakan, jika terdapat beberapa pengecualian, setiap satu mesti dikendalikan secara individu.
//user-defined class class Test1{}; class Test2{}; try{ //throw object of the first class throw Test1(); } catch(Test1 t){ .... } try{ //throw object of the second class throw Test2(); } catch(Test2 t){ .... }
#include <iostream> using namespace std; //define multiple classes class Test1{}; class Test2{}; int main() { try{ //throw objects of multiple classes throw Test1(); } catch(Test1 t) { cout << "Caught exception 'Test1'!" << endl; } try{ throw Test2(); } catch(Test2 t) { cout << "Caught exception 'Test2'!" << endl; } return 0; }
Caught exception 'Test1'! Caught exception 'Test2'!
Kami terpaksa menggunakan dua blok cuba-tangkap yang berbeza untuk mengendalikan dua kategori pengecualian yang berbeza. Sekarang mari kita lihat sama ada kita boleh mencipta dan mengendalikan pengecualian menggunakan pembina.
Kami boleh menggunakan pembina kelas untuk membuat pengecualian tersuai. Dalam contoh di bawah, kita dapat melihat bahawa balingan dan pengendalian pengecualian diuruskan di dalam pembina kelas.
#include <iostream> using namespace std; //define a class class Test1{ string str; public: //try-catch in the constructor Test1(string str){ try{ if (str == "Hello"){ throw "Exception! String cannot be 'Hello'!"; } this->str = str; } catch(const char* s) { cout << s << endl; } } }; int main() { Test1 t("Hello"); return 0; }
Exception! String cannot be 'Hello'!
Pengendalian pengecualian adalah salah satu ciri terpenting yang disediakan oleh C++. Kita boleh mewarisi kelas pengecualian C++ dan menggunakannya untuk melaksanakan pengendalian pengecualian, tetapi ini hanyalah amalan yang baik dan tidak diperlukan untuk mencipta pengecualian tersuai. Faedah mewarisi kelas pengecualian C++ ialah jika terdapat pernyataan tangkapan biasa yang menangkap std::exception, ia boleh mengendalikan sebarang pengecualian yang ditentukan pengguna tanpa perlu mengetahui butiran khusus. Perlu diingatkan bahawa pernyataan 'lempar' hanya berfungsi dalam blok 'cuba', jika tidak, ia tidak akan berfungsi. Pernyataan 'tangkap' hanya boleh mengendalikan pengecualian yang dilemparkan oleh kelas yang ditentukan pengguna atau kelas STL tertentu.
Atas ialah kandungan terperinci Program C++ mencipta pengecualian tersuai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!