C++ 예외 처리는 함수 예외와 클래스 예외의 두 가지 유형으로 나뉩니다. 여러 예외 처리 전략에는 하나씩 처리하고 기본 클래스 캡처가 포함됩니다. 실제 전투에서는 예외 처리 전략을 사용하여 다양한 소스의 예외를 처리하고 예외 유형에 따라 다양한 오류 메시지를 인쇄할 수 있습니다.
예외 처리는 런타임 오류를 처리하는 C++의 강력한 메커니즘입니다. 이를 통해 프로그램은 예외가 발생할 때 정상적으로 응답하고 복구할 수 있습니다. C++에는 함수 예외와 클래스 예외라는 두 가지 유형의 예외가 있습니다. 이 기사에서는 이러한 두 가지 예외 유형을 살펴보고 여러 예외 처리 전략을 사용하여 이를 동시에 처리하는 방법을 보여줍니다.
함수 예외는 함수에서 직접 발생하는 예외입니다. throw
키워드와 그 뒤에 예외 유형 또는 개체를 사용합니다. 예: 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 (...) { // 处理任何其他异常 }
考虑以下代码,它调用 divide
和 checkNumber
#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; }
throw
키워드와 예외 클래스 인스턴스를 사용합니다. 예: 🎜Division by zero occurred Error in number check
divide
및 checkNumber
함수를 호출하고 다양한 예외 조건에 따라 메시지를 인쇄합니다. 🎜rrreee🎜출력: 🎜rrreee위 내용은 C++ 함수 예외 및 클래스 예외: 여러 예외 처리 전략의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!