Pengendalian pengecualian dalam C++ boleh dipertingkatkan dengan kelas pengecualian tersuai yang menyediakan mesej ralat khusus, maklumat kontekstual dan melakukan tindakan tersuai berdasarkan jenis ralat. Tentukan kelas pengecualian yang diwarisi daripada std::exception untuk memberikan maklumat ralat tertentu. Gunakan kata kunci lontaran untuk membuang pengecualian tersuai. Gunakan dynamic_cast dalam blok try-catch untuk menukar pengecualian yang ditangkap kepada jenis pengecualian tersuai. Dalam kes sebenar, fungsi open_file membuang pengecualian FileNotFoundException Menangkap dan mengendalikan pengecualian boleh memberikan mesej ralat yang lebih spesifik.
C++ Function Exception Advanced: Customized Error Handling
Exception handling ialah mekanisme penting untuk mengendalikan ralat dan pengecualian dalam bahasa pengaturcaraan moden. Dalam C++, pengecualian biasanya ditangkap dan dikendalikan menggunakan blok try-catch
. Walau bagaimanapun, jenis pengecualian standard (seperti std::exception
) hanya memberikan maklumat terhad, yang boleh menyukarkan penyahpepijatan dan pengendalian ralat. try-catch
块来捕获和处理。然而,标准异常类型 (例如 std::exception
) 只提供有限的信息,这可能会给调试和错误处理带来困难。
定制异常类
为了创建更具信息性和可操作性的异常,你可以定义自己的异常类。这样做的好处包括:
要定义异常类,只需要创建一个继承自 std::exception
的类:
class MyException : public std::exception { public: explicit MyException(const std::string& message) : message(message) {} const char* what() const noexcept override { return message.c_str(); } private: std::string message; };
使用异常类型
在使用定制异常类时,你可以通过 throw
关键字抛出它们:
throw MyException("Error occurred during file operation");
在 try-catch
块中,可以使用 dynamic_cast
将捕获到的异常转换为定制异常类型:
try { // 代码可能引发异常 } catch (std::exception& e) { std::cerr << "Standard exception: " << e.what() << std::endl; } catch (MyException& e) { std::cerr << "MyException: " << e.what() << std::endl; }
实战案例
假设有一个函数 open_file
,用于打开一个文件。如果文件不存在或无法打开,它将抛出一个 FileNotFoundException
异常:
class FileNotFoundException : public std::exception { public: explicit FileNotFoundException(const std::string& filename) : filename(filename) {} const char* what() const noexcept override { return ("File not found: " + filename).c_str(); } private: std::string filename; }; std::ifstream open_file(const std::string& filename) { std::ifstream file(filename); if (!file.is_open()) { throw FileNotFoundException(filename); } return file; }
在调用 open_file
函数时,你可以使用 try-catch
块来捕获并处理 FileNotFoundException
Kelas Pengecualian Tersuai
🎜🎜Untuk mencipta pengecualian yang lebih bermaklumat dan boleh diambil tindakan, anda boleh menentukan kelas pengecualian anda sendiri. Faedah ini termasuk: 🎜std::exception
: 🎜try { std::ifstream file = open_file("myfile.txt"); // 使用文件 } catch (FileNotFoundException& e) { std::cerr << "File not found: " << e.what() << std::endl; } catch (std::exception& e) { std::cerr << "Other error: " << e.what() << std::endl; }
lempar
: 🎜rrreee🎜Dalam blok try-catch
, anda boleh menggunakan dynamic_cast
untuk tukar pengecualian yang ditangkap kepada jenis pengecualian tersuai: 🎜rrreee🎜🎜Kes praktikal🎜🎜🎜Andaikan terdapat fungsi open_file
, yang digunakan untuk membuka fail. Jika fail tidak wujud atau tidak boleh dibuka, ia akan membuang pengecualian FileNotFoundException
: 🎜rrreee🎜Apabila memanggil fungsi open_file
, anda boleh menggunakan try-catch
code> sekat untuk menangkap dan mengendalikan FileNotFoundException
: 🎜rrreee🎜Dengan cara ini anda boleh memberikan mesej ralat yang lebih khusus untuk membantu nyahpepijat dan pengendalian ralat. 🎜Atas ialah kandungan terperinci Pengecualian Fungsi C++ Lanjutan: Pengendalian Ralat Tersuai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!