exception1, exception2 및 exceptionN은 예외를 참조하기 위해 정의한 이름입니다.
예시 1:
#include<iostream>
#include<vector>
using namespace std;
int main() {
vector<int> vec;
vec.push_back(0);
vec.push_back(1);
// access the third element, which doesn't exist
try
{
vec.at(2);
}
catch (exception& ex)
{
cout << "Exception occurred!" << endl;
}
return 0;
}
출력:
다음은 코드의 스크린샷입니다.
코드 설명:
기능을 사용하려면 프로그램에 iostream 헤더 파일을 포함합니다.
기능을 사용하려면 프로그램에 벡터 헤더 파일을 포함합니다.
호출하지 않고 프로그램의 std 네임스페이스를 클래스에 포함합니다.
main() 함수를 호출합니다. 프로그램 로직은 본문 내에 추가되어야 합니다.
정수 데이터를 저장할 vec라는 벡터를 만듭니다.
vec라는 벡터에 요소 0을 추가합니다.
vec라는 벡터에 요소 1을 추가합니다.
댓글입니다. C++ 컴파일러에서 건너뜁니다.
예외를 잡으려면 try 문을 사용하십시오. {는 try/catch 블록 본문의 시작을 표시합니다. 본문에 추가된 코드는 보호된 코드가 됩니다.
vec라는 벡터의 인덱스 2(세 번째 요소)에 저장된 요소에 액세스하려고 합니다. 이 요소는 존재하지 않습니다.
try/catch 블록 본문의 끝입니다.
예외를 잡아라. 반환된 오류 메시지는 변수 ex에 저장됩니다.
예외가 포착되면 콘솔에 일부 메시지를 출력합니다.
캐치 블록 본문의 끝입니다.
프로그램은 성공적으로 실행되면 값을 반환해야 합니다.
main() 함수 본문의 끝입니다.
예시 2:
#include <iostream>
using namespace std;
double zeroDivision(int x, int y) {
if (y == 0) {
throw "Division by Zero!";
}
return (x / y);
}
int main() {
int a = 11;
int b = 0;
double c = 0;
try {
c = zeroDivision(a, b);
cout << c << endl;
}
catch (const char* message) {
cerr << message << endl;
}
return 0;
}
출력:
다음은 코드의 스크린샷입니다.
코드 설명:
기능을 사용하려면 프로그램에 iostream 헤더 파일을 포함합니다.
호출하지 않고 프로그램의 std 네임스페이스를 클래스에 포함합니다.
두 개의 정수 인수 x 및 y를 사용하는 zeroDivision이라는 함수를 만듭니다. 함수는 이중 결과를 반환해야 합니다.
if 문을 사용하여 변수 인수 y의 값이 0인지 확인합니다. {는 if 본문의 시작을 표시합니다.
y가 0인 경우 반환/던질 메시지입니다.
if 문의 본문 끝.
zeroDivision 함수는 x/y 값을 반환해야 합니다.
zeroDivision 함수 본문의 끝입니다.
main() 메서드를 호출합니다. {는 이 메서드의 시작을 표시합니다.
정수 변수를 선언하고 값 11을 할당합니다.
정수 변수 b를 선언하고 값 0을 할당합니다.
이중 변수 c를 선언하고 값 0을 할당합니다.
예외를 잡으려면 try 문을 사용하십시오. {는 try/catch 블록 본문의 시작을 표시합니다. 본문에 추가된 코드는 보호된 코드가 됩니다.
zeroDivision 함수를 호출하고 인수 a와 b, 즉 11과 0에 전달합니다. 이 작업의 결과는 변수 c에 저장됩니다.
콘솔에 변수 c의 값을 출력합니다.
try/catch 블록 본문의 끝입니다.
예외를 잡아라. 반환된 오류 메시지는 변수 메시지에 저장됩니다.
콘솔에 반환된 오류 메시지를 인쇄합니다.
캐치 블록 본문의 끝입니다.
프로그램은 성공적으로 실행되면 값을 반환해야 합니다.
main() 함수 본문의 끝입니다.
C++ 표준 예외
C++는 클래스에 정의된 표준 예외 목록과 함께 제공됩니다. 아래에 설명되어 있습니다.
예외
설명
std::exception이것은 예외이며 모든 표준 C++ 예외의 부모 클래스입니다.std::bad_alloc이 예외는 새 키워드에 의해 throw됩니다.std::bad_cast이것은 dynamic_cast에 의해 throw된 예외입니다.std::bad_exception예기치 않은 예외를 처리하는 데 유용한 장치 in C++ 프로그램에서.std::bad_typeidTypeid.std::logic_error에 의해 발생된 예외이 예외는 이론적으로 code.std::domain_error를 읽어서 감지할 수 있습니다. 수학적으로 유효하지 않은 도메인을 사용한 후 발생하는 예외입니다.std::invalid_argument잘못된 인수를 사용하여 발생하는 예외 .std::length_error큰 생성 후 발생하는 예외 수학적 overflow.std::range_error이 예외는 범위를 벗어난 값을 저장하려고 할 때 throw됩니다.std::underflow_errorm 발생 후 throw되는 예외 주제별 언더플로.
사용자 정의 예외
C++ std::exception 클래스를 사용하면 예외로 throw될 수 있는 개체를 정의할 수 있습니다. 이 클래스는 <예외> 헤더에 정의되었습니다. 클래스는 what이라는 가상 멤버 함수를 제공합니다.
이 함수는 char * 유형의 null로 끝나는 문자 시퀀스를 반환합니다. 예외 설명을 갖도록 파생 클래스에서 덮어쓸 수 있습니다.