Maison  >  Article  >  développement back-end  >  Comment la gestion des exceptions C++ prend-elle en charge les routines de gestion des erreurs personnalisées ?

Comment la gestion des exceptions C++ prend-elle en charge les routines de gestion des erreurs personnalisées ?

王林
王林original
2024-06-05 12:13:56575parcourir

La gestion des exceptions C++ permet la création de routines de gestion des erreurs personnalisées pour gérer les erreurs d'exécution en lançant des exceptions et en les interceptant à l'aide de blocs try-catch. 1. Créez une classe d'exception personnalisée dérivée de la classe d'exception et remplacez la méthode what() ; 2. Utilisez le mot-clé throw pour lancer une exception ; 3. Utilisez le bloc try-catch pour intercepter les exceptions et spécifier les types d'exception qui peuvent être générés. manipulé.

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

Gestion des exceptions C++ : prend en charge les routines de gestion des erreurs personnalisées

En C++, la gestion des exceptions est un mécanisme puissant pour gérer les erreurs d'exécution. Il vous permet de créer des routines personnalisées de gestion des erreurs pour gérer les conditions d'erreur de manière élégante et efficace.

Classe d'exception

En C++, les exceptions sont représentées par la classe exception ou ses classes dérivées. Pour lever une exception personnalisée, créez votre propre classe dérivée et remplacez la méthode what(). Cette méthode renvoie une chaîne décrivant l'erreur. 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

🎜Lancez une exception🎜🎜🎜Utilisez le mot-clé throw pour lever une exception. Il accepte un objet d'exception en paramètre : 🎜rrreee🎜🎜Catch exceptions🎜🎜🎜Catch exceptions à l'aide du bloc try-catch. Chaque clause catch spécifie un type d'exception qui peut être géré. Si une exception de type correspondant se produit, le code de cette clause sera exécuté : 🎜rrreee🎜🎜 Exemple pratique 🎜🎜🎜 Considérons une fonction qui ouvre un fichier et le lit. Si le fichier ne peut pas être ouvert, la fonction doit lever notre exception personnalisée : 🎜rrreee🎜 Dans l'exemple ci-dessus, la fonction read_file() renvoie une exception FileOpenException lorsque le fichier démarre lorsqu'il est impossible d'ouvrir. Dans la fonction main(), nous utilisons le bloc try-catch pour intercepter les exceptions et les gérer en conséquence. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn