Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah pengendalian pengecualian C++ menyokong rutin pengendalian ralat tersuai?

Bagaimanakah pengendalian pengecualian C++ menyokong rutin pengendalian ralat tersuai?

王林
王林asal
2024-06-05 12:13:56635semak imbas

Pengendalian pengecualian C++ membolehkan penciptaan rutin pengendalian ralat tersuai untuk mengendalikan ralat masa jalan dengan melemparkan pengecualian dan menangkapnya menggunakan blok cuba-tangkap. 1. Buat kelas pengecualian tersuai yang diperolehi daripada kelas pengecualian dan ganti kaedah what() 2. Gunakan kata kunci lontaran untuk membuang pengecualian 3. Gunakan blok cuba-tangkap untuk menangkap pengecualian dan nyatakan jenis pengecualian yang boleh; dikendalikan.

C++ 异常处理如何支持自定义错误处理例程?

C++ Pengendalian Pengecualian: Menyokong rutin pengendalian ralat tersuai

Dalam C++, pengendalian pengecualian ialah mekanisme yang berkuasa untuk mengendalikan ralat masa jalan. Ia membolehkan anda membuat rutin pengendalian ralat tersuai untuk mengendalikan situasi ralat dengan cara yang elegan dan cekap.

Kelas pengecualian

Dalam C++, pengecualian diwakili oleh kelas exception atau kelas terbitannya. Untuk membuang pengecualian tersuai, cipta kelas terbitan anda sendiri dan ganti kaedah what(). Kaedah ini mengembalikan rentetan yang menerangkan ralat. exception 类或其派生类表示。要抛出一个自定义异常,请创建您自己的派生类并覆盖 what() 方法。此方法返回一个描述错误的字符串。

class MyCustomException : public std::exception {
public:
  const char* what() const noexcept override {
    return "This is my custom exception.";
  }
};

抛出异常

使用 throw 关键字抛出异常。它接受一个异常对象作为参数:

throw MyCustomException();

捕捉异常

使用 try-catch 块捕捉异常。每个 catch 子句都指定一个可以处理的异常类型。如果发生匹配类型的异常,将执行该子句中的代码:

try {
  // 可能抛出异常的代码
} catch (MyCustomException& e) {
  // 处理 MyCustomException 异常
} catch (std::exception& e) {
  // 处理所有其他类型的异常
}

实战案例

让我们考虑一个打开文件并对其进行读取的函数。如果无法打开文件,则函数应抛出我们的自定义异常:

#include <fstream>
#include <iostream>

using namespace std;

// 自定义异常类
class FileOpenException : public std::exception {
public:
  const char* what() const noexcept override {
    return "Could not open the file.";
  }
};

// 打开文件并读取其内容的函数
string read_file(const string& filename) {
  ifstream file(filename);
  if (!file.is_open()) {
    throw FileOpenException();
  }

  string contents;
  string line;
  while (getline(file, line)) {
    contents += line + '\n';
  }
  file.close();

  return contents;
}

int main() {
  try {
    string contents = read_file("file.txt");
    cout << contents << endl;
  } catch (FileOpenException& e) {
    cout << "Error: " << e.what() << endl;
  } catch (std::exception& e) {
    cout << "An unexpected error occurred." << endl;
  }
  
  return 0;
}

在上面的示例中,read_file() 函数抛出 FileOpenException 异常,当文件无法打开时启动。在 main() 函数中,我们使用 try-catchrrreee

🎜Lempar pengecualian🎜🎜🎜Gunakan kata kunci lempar untuk membuang pengecualian. Ia menerima objek pengecualian sebagai parameter: 🎜rrreee🎜🎜Catch exceptions🎜🎜🎜Catch exception menggunakan blok try-catch. Setiap klausa catch menentukan jenis pengecualian yang boleh dikendalikan. Jika pengecualian jenis padanan berlaku, kod dalam klausa ini akan dilaksanakan: 🎜rrreee🎜🎜 Contoh praktikal 🎜🎜🎜 Mari kita pertimbangkan fungsi yang membuka fail dan membacanya. Jika fail tidak boleh dibuka, fungsi itu harus membuang pengecualian tersuai kami: 🎜rrreee🎜 Dalam contoh di atas, fungsi read_file() membuang pengecualian FileOpenException apabila fail Mula apabila tidak dapat dibuka. Dalam fungsi main(), kami menggunakan blok try-catch untuk menangkap pengecualian dan mengendalikannya dengan sewajarnya. 🎜

Atas ialah kandungan terperinci Bagaimanakah pengendalian pengecualian C++ menyokong rutin pengendalian ralat tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn