Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengecualian fungsi C++ dan pengecualian kelas: pelbagai strategi pengendalian pengecualian

Pengecualian fungsi C++ dan pengecualian kelas: pelbagai strategi pengendalian pengecualian

WBOY
WBOYasal
2024-05-03 17:18:01285semak imbas

Pengendalian pengecualian C++ terbahagi kepada dua jenis: pengecualian fungsi dan pengecualian kelas. Strategi pengendalian pengecualian berbilang termasuk pengendalian satu demi satu dan menangkap kelas asas. Dalam pertempuran sebenar, strategi pengendalian pengecualian boleh digunakan untuk mengendalikan pengecualian daripada sumber yang berbeza dan mencetak mesej ralat yang berbeza mengikut jenis pengecualian.

C++ 函数异常与类异常:多重异常处理策略

Pengecualian Fungsi C++ dan Pengecualian Kelas: Strategi Pengendalian Pengecualian Berbilang

Ikhtisar

Pengendalian pengecualian ialah mekanisme yang berkuasa dalam C++ untuk mengendalikan ralat masa jalan. Ia membolehkan program bertindak balas dengan anggun dan pulih apabila pengecualian berlaku. Terdapat dua jenis pengecualian dalam C++: pengecualian fungsi dan pengecualian kelas. Artikel ini akan meneroka dua jenis pengecualian ini dan menunjukkan cara menggunakan berbilang strategi pengendalian pengecualian untuk mengendalikannya secara serentak.

Pengecualian fungsi

Pengecualian fungsi ialah pengecualian yang dilemparkan terus dalam fungsi. Mereka menggunakan kata kunci lempar, diikuti dengan jenis atau objek pengecualian. Contohnya: throw 关键字,后面跟一个异常类型或对象。例如:

void divide(int a, int b) {
  if (b == 0)
    throw std::runtime_error("Division by zero");
}

类异常

类异常是由用户自定义类抛出的异常。它们使用 throw 关键字,后面跟一个异常类实例。例如:

class NegativeNumberException : std::exception {
public:
  const char *what() const override {
    return "Cannot accept negative numbers";
  }
};

void checkNumber(int n) {
  if (n < 0)
    throw NegativeNumberException();
}

多重异常处理策略

有时,函数或类可能同时抛出多种异常。在这种情况下,可以使用多重异常处理策略来处理所有异常。以下策略是常用的:

1. 逐一处理:

try {
  // 调用可能抛出异常的代码
} catch (std::runtime_error &e) {
  // 处理 std::runtime_error 异常
} catch (NegativeNumberException &e) {
  // 处理 NegativeNumberException 异常
} catch (...) {
  // 处理任何其他异常
}

2. 捕获基类:

try {
  // 调用可能抛出异常的代码
} catch (std::exception &e) {
  // 处理所有 std::exception 派生的异常
} catch (...) {
  // 处理任何其他异常
}

实战案例

考虑以下代码,它调用 dividecheckNumber

#include <iostream>
using namespace std;

void divide(int a, int b);
void checkNumber(int n);

int main() {
  try {
    divide(5, 0);
  } catch (std::runtime_error &e) {
    cout << "Division by zero occurred" << endl;
  } catch (NegativeNumberException &e) {
    cout << "Negative number detected" << endl;
  } catch (...) {
    cout << "Unknown exception occurred" << endl;
  }

  try {
    checkNumber(10);
  } catch (...) {
    cout << "Error in number check" << endl;
  }

  return 0;
}

Pengecualian kelas

Pengecualian kelas ialah pengecualian yang dilemparkan oleh kelas yang ditentukan pengguna. Mereka menggunakan kata kunci lempar, diikuti dengan contoh kelas pengecualian. Contohnya: 🎜
Division by zero occurred
Error in number check
🎜Berbilang strategi pengendalian pengecualian🎜🎜Kadangkala, fungsi atau kelas mungkin membuang berbilang pengecualian pada masa yang sama. Dalam kes ini, anda boleh menggunakan strategi pengendalian berbilang pengecualian untuk mengendalikan semua pengecualian. Strategi berikut biasanya digunakan: 🎜🎜1 Proses satu persatu: 🎜rrreee🎜2. , yang memanggil fungsi bahagi dan checkNumber dan mencetak mesej mengikut syarat pengecualian yang berbeza: 🎜rrreee🎜Output: 🎜rrreee

Atas ialah kandungan terperinci Pengecualian fungsi C++ dan pengecualian kelas: pelbagai strategi pengendalian pengecualian. 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