산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 예외 처리:시도, 캐치, 던지기 예제

C++에서 예외 처리란 무엇입니까?

C++의 예외 처리는 런타임 오류와 같은 예기치 않은 상황을 처리하는 방법을 제공합니다. 따라서 예기치 않은 상황이 발생할 때마다 프로그램 제어는 핸들러로 알려진 특수 기능으로 이전됩니다.

예외를 포착하려면 코드의 일부 섹션을 예외 검사에 배치합니다. 코드 섹션은 try-catch 블록 내에 배치됩니다.

코드의 해당 섹션 내에서 예외적인 상황이 발생하면 예외가 발생합니다. 다음으로 예외 처리기가 프로그램의 제어를 인수합니다.

특별한 상황이 발생하지 않는 경우 코드는 정상적으로 실행됩니다. 핸들러는 무시됩니다.

이 C++ 자습서에서는 다음을 배우게 됩니다.

왜 예외 처리인가?

다음은 C++에서 예외 처리를 사용하는 이유입니다.

예외 처리 키워드

C++의 예외 처리는 다음 세 가지 키워드를 중심으로 이루어집니다.

코드 블록에서 예외가 발생한다고 가정합니다. 예외는 try 및 catch 키워드를 사용하는 메서드에 의해 catch됩니다. try/catch 블록은 예외를 던질 수 있는 코드를 둘러싸야 합니다. 이러한 코드를 보호 코드라고 합니다.

구문:

try/catch는 다음 구문을 사용합니다.

try {
   // the protected code
} catch( Exception_Name exception1 ) {
   // catch block
} catch( Exception_Name exception2 ) {
   // catch block
} catch( Exception_Name exceptionN ) {
   // catch block
}

예시 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;
}

출력:

다음은 코드의 스크린샷입니다.

코드 설명:

  1. 기능을 사용하려면 프로그램에 iostream 헤더 파일을 포함합니다.
  2. 기능을 사용하려면 프로그램에 벡터 헤더 파일을 포함합니다.
  3. 호출하지 않고 프로그램의 std 네임스페이스를 클래스에 포함합니다.
  4. main() 함수를 호출합니다. 프로그램 로직은 본문 내에 추가되어야 합니다.
  5. 정수 데이터를 저장할 vec라는 벡터를 만듭니다.
  6. vec라는 벡터에 요소 0을 추가합니다.
  7. vec라는 벡터에 요소 1을 추가합니다.
  8. 댓글입니다. C++ 컴파일러에서 건너뜁니다.
  9. 예외를 잡으려면 try 문을 사용하십시오. {는 try/catch 블록 본문의 시작을 표시합니다. 본문에 추가된 코드는 보호된 코드가 됩니다.
  10. vec라는 벡터의 인덱스 2(세 번째 요소)에 저장된 요소에 액세스하려고 합니다. 이 요소는 존재하지 않습니다.
  11. try/catch 블록 본문의 끝입니다.
  12. 예외를 잡아라. 반환된 오류 메시지는 변수 ex에 저장됩니다.
  13. 예외가 포착되면 콘솔에 일부 메시지를 출력합니다.
  14. 캐치 블록 본문의 끝입니다.
  15. 프로그램은 성공적으로 실행되면 값을 반환해야 합니다.
  16. 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;
}

출력:

다음은 코드의 스크린샷입니다.

코드 설명:

  1. 기능을 사용하려면 프로그램에 iostream 헤더 파일을 포함합니다.
  2. 호출하지 않고 프로그램의 std 네임스페이스를 클래스에 포함합니다.
  3. 두 개의 정수 인수 x 및 y를 사용하는 zeroDivision이라는 함수를 만듭니다. 함수는 이중 결과를 반환해야 합니다.
  4. if 문을 사용하여 변수 인수 y의 값이 0인지 확인합니다. {는 if 본문의 시작을 표시합니다.
  5. y가 0인 경우 반환/던질 메시지입니다.
  6. if 문의 본문 끝.
  7. zeroDivision 함수는 x/y 값을 반환해야 합니다.
  8. zeroDivision 함수 본문의 끝입니다.
  9. main() 메서드를 호출합니다. {는 이 메서드의 시작을 표시합니다.
  10. 정수 변수를 선언하고 값 11을 할당합니다.
  11. 정수 변수 b를 선언하고 값 0을 할당합니다.
  12. 이중 변수 c를 선언하고 값 0을 할당합니다.
  13. 예외를 잡으려면 try 문을 사용하십시오. {는 try/catch 블록 본문의 시작을 표시합니다. 본문에 추가된 코드는 보호된 코드가 됩니다.
  14. zeroDivision 함수를 호출하고 인수 a와 b, 즉 11과 0에 전달합니다. 이 작업의 결과는 변수 c에 저장됩니다.
  15. 콘솔에 변수 c의 값을 출력합니다.
  16. try/catch 블록 본문의 끝입니다.
  17. 예외를 잡아라. 반환된 오류 메시지는 변수 메시지에 저장됩니다.
  18. 콘솔에 반환된 오류 메시지를 인쇄합니다.
  19. 캐치 블록 본문의 끝입니다.
  20. 프로그램은 성공적으로 실행되면 값을 반환해야 합니다.
  21. 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로 끝나는 문자 시퀀스를 반환합니다. 예외 설명을 갖도록 파생 클래스에서 덮어쓸 수 있습니다.

예:

#include <iostream>
#include <exception>
using namespace std;

class newException : public exception
{
	virtual const char* what() const throw()
	{
		return "newException occurred";
	}
} newex;

int main() {

	try {
		throw newex;
		}
	catch (exception& ex) {
		cout << ex.what() << '\n';
	}
	return 0;	
}

출력:

다음은 코드의 스크린샷입니다.

코드 설명:

  1. 프로그램에 iostream 헤더 파일을 포함합니다. 우리는 오류 없이 기능을 사용할 것입니다.
  2. 프로그램에 예외 헤더 파일을 포함합니다. 우리는 오류없이 기능을 사용할 것입니다.
  3. 클래스를 호출하지 않고 사용하려면 프로그램에 std 네임스페이스를 포함합니다.
  4. newException이라는 새 클래스를 만듭니다. 이 클래스는 C++의 예외 클래스를 상속합니다.
  5. 클래스 본문의 시작입니다.
  6. 예외 헤더 파일에 정의된 가상 멤버 함수 what()을 덮어씁니다. 그런 다음 우리는 우리 자신의 예외, 새로운 예외를 설명할 것입니다.
  7. 새 예외 정의를 시작합니다.
  8. 새 예외가 발생하면 반환될 메시지입니다.
  9. 새 예외 정의의 끝입니다.
  10. newException 클래스 본문의 끝. newex는 새로운 예외를 포착하는 데 사용되는 이름이며, 그 후에 newException이 호출됩니다.
  11. main() 함수를 호출합니다. 프로그램 로직은 본문 내에 추가되어야 합니다. {는 본문의 시작을 표시합니다.
  12. try 문을 사용하여 예외를 표시해야 하는 코드를 표시합니다. {는 try/catch 블록 본문의 시작을 표시합니다. 이것으로 둘러싸인 코드는 보호됩니다.
  13. 잡혔다면 newex 예외를 던집니다.
  14. 시도 본문의 끝입니다.
  15. Catch 문을 사용하여 예외를 포착합니다. 예외 오류 메시지는 변수 ex에 저장됩니다.
  16. 콘솔에 예외 오류 메시지를 인쇄합니다.
  17. catch 문의 본문 끝.
  18. 프로그램이 성공적으로 실행되면 값을 반환해야 합니다.
  19. main() 함수 본문의 끝입니다.

요약:


C 언어

  1. C++ 주석
  2. try, except 및 finally 문을 사용하는 Python 예외 처리
  3. 자바 예외 처리
  4. 자바 시도 ... 캐치
  5. EXAMPLE이 있는 C++ Switch Case 문
  6. 예제를 사용한 C++ 배열 동적 할당
  7. 예제가 있는 C++ 구조체
  8. 예제가 있는 C++의 std::list
  9. 구조체와 클래스의 차이점:C++ 예제로 설명
  10. 15가지 최고의 C++ IDE:무료 Windows 편집기 | 컴파일러 | 2021년