Dalam C++, mekanisme pengendalian pengecualian ialah kemahiran pengaturcaraan yang sangat penting Ia membolehkan program bertindak balas dan mengendalikan ralat atau situasi tidak normal, dan mengelakkan ranap program atau membuang pengecualian yang tidak diketahui. Walau bagaimanapun, dalam C++, mekanisme pengendalian pengecualian lalai hanya boleh menangkap beberapa jenis pengecualian yang diketahui dan tidak boleh mengendalikan jenis pengecualian tersuai. Oleh itu, dalam artikel ini, kami akan memperkenalkan cara melaksanakan mekanisme pengendalian pengecualian tersuai dalam C++.
Kelas pengecualian tersuai
Pertama, kita perlu menentukan kelas pengecualian tersuai untuk mewakili jenis pengecualian tertentu. Dalam C++, kita boleh menentukan kelas pengecualian kita sendiri dengan mewarisi kelas std::exception. Berikut ialah contoh kelas pengecualian tersuai yang mudah:
#include <exception> #include <string> class MyException : public std::exception { public: MyException(const std::string& msg) : m_msg(msg) {} virtual const char* what() const noexcept override { return m_msg.c_str(); } private: std::string m_msg; };
Dalam kod di atas, kami telah menentukan kelas pengecualian tersuai yang dipanggil MyException. Kelas ini mewarisi daripada kelas std::exception dan melaksanakan kaedah what() kelas ini. Kaedah ini digunakan untuk mengembalikan butiran pengecualian.
Lemparkan pengecualian tersuai
Apabila menggunakan kelas pengecualian tersuai, kita perlu membuat instantiat objek kelas ini dahulu, dan kemudian menggunakan kata kunci lontaran untuk membuangnya. Contohnya, kita boleh menggunakan kod berikut untuk membuang pengecualian tersuai dalam atur cara:
throw MyException("Something wrong happened!");
Tangkap pengecualian tersuai
Apabila menangkap pengecualian tersuai, kita perlu menggunakan blok pernyataan cuba-tangkap. Sebagai contoh, kod berikut menunjukkan cara untuk menangkap MyException:
try { // some code that may throw MyException } catch (const MyException& e) { // handle the exception here std::cerr << "Caught MyException with message: " << e.what() << ' '; }
Jika program melemparkan pengecualian jenis MyException dalam blok pernyataan cuba, blok pernyataan tangkapan akan menangkap pengecualian dan melaksanakan kod pengendalian pengecualian yang sepadan.
Fungsi pengendalian pengecualian tersuai
Untuk mengendalikan pengecualian tersuai dengan lebih baik, kami boleh menentukan fungsi untuk mengendalikan semua jenis pengecualian. Sebagai contoh, dalam kod berikut, kami telah mentakrifkan fungsi yang dipanggil handleException untuk mengendalikan semua jenis pengecualian:
#include <iostream> void handleException(const std::exception& e) noexcept { std::cerr << "Caught exception with message: " << e.what() << ' '; } int main() { try { // some code that may throw an exception } catch (const std::exception& e) { handleException(e); } }
Dalam kod di atas, kami telah menggunakan fungsi yang dipanggil handleException untuk mengendalikan semua jenis pengecualian. Dalam program, jika program melemparkan apa-apa jenis pengecualian, pengecualian akan diserahkan kepada fungsi handleException dan dikendalikan.
Ringkasan
Dalam C++, mekanisme pengendalian pengecualian tersuai ialah teknik yang sangat berguna, yang boleh membantu kami mengendalikan pengecualian dalam program dengan lebih baik dan mengelakkan ranap program atau membuang pengecualian yang tidak diketahui. Dalam artikel ini, kami memperkenalkan cara untuk menentukan kelas pengecualian anda sendiri dan menggunakan blok pernyataan cuba-tangkap untuk menangkap dan mengendalikan pengecualian tersuai. Pada masa yang sama, kami juga memperkenalkan cara mentakrifkan fungsi untuk mengendalikan semua jenis pengecualian untuk mengatur dan mengurus logik pengendalian pengecualian program dengan lebih baik.
Atas ialah kandungan terperinci Laksanakan mekanisme pengendalian pengecualian tersuai dalam C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!