[C++] 예외 처리 try - catch 블록의 자세한 사용 방법과 예제 코드
C++에서 예외 처리는 'try', 'catch', 'throw' 키워드를 사용하여 관리됩니다.
- 'try' : 예외가 발생할 수 있는 코드를 포함하는 블록을 설정합니다.
- 'catch' : 특정 타입의 예외가 발생하면 해당 블록 내의 코드를 실행합니다.
- 'throw' : 특정 예외를 발생시킵니다.
try-catch 블록의 사용
try
{
// 예외를 발생시킬 수 있는 코드
throw "예외 상황 발생";
}
catch(const char* _exception)
{
std::cerr << "Error : " << _exception << std::endl;
}
참고
cerr은 주로 에러나 예외 발생 시에 사용되며, cout과는 달리 버퍼링을 하지 않아서 빠르게 출력되므로,
사용자에게 신속하게 에러 정보를 보여줄 수 있습니다.
위 코드에서, 'throw "예외 발생";' 는 문자열 예외를 발생시킵니다.
이 예외는 그 다음에 오는 catch블록에서 처리됩니다.
catch 블록의 파라미터('const char* _exception)는 throw블록에서 발생된 예외와 같은 타입이어야 합니다.
여러 개의 catch 블록을 설정하아ㅕ 다양한 유형의 예외를 처리할 수 있습니다.
예를 들어
try
{
// 예외를 발생시킬 수 있는 코드
throw "예외 처리";
}
catch(int _exception)
{
std::cerr << "int : " << _exception << std::endl;
}
catch(const char* _exception)
{
std::cerr << "char : " << _exception << std::endl;
}
위 코드에서 첫 번째 catch 블록은 정수 타입의 예외를 처리하고, 두번째 catch 블록은 문자열 타입의 예외를 처리합니다.
'catch(...)'문을 사용하면 모든 유형의 예외를 처리할 수 있습니다. 그러나 이것은 일반적으로 마지막 수단으로 사용되어야 합니다. 왜냐하면 그렇게 되면 프로그램은 특정 예외의 세부 정보를 알 수 없게 되기 때문입니다.
사용자 정의 예외
C++에서는 사용자 정의 예외를 만들어서 더 복잡한 예외 처리 시나리오를 구현할 수 있습니다.
사용자 정의 예외를 만들려면, 일반적으로 'std::exception'클래스를 상속받는 새 클래스를 만듭니다.
class MyException : public std::exception
{
public:
const char* what() const throw()
{
return "MyException occurred";
}
};
try
{
throw MyException();
}
catch(MyException& _e)
{
std::cerr << "Error: " << _e.what() << std::endl;
}
catch(...)
{
std::cerr << "Unknown exception caught" << std::endl;
}
이 코드에서, MyException 클래스는 사용자 정의 예외를 정의하는데 사용됩니다.
이 클래스는 std::exception 클래스를 상속박고, what()함수를 재정의(override)하여 예외 메시지를 반환합니다. 이 예외는
throw MyException(); 라인에서 발생시키고, catch(MyException& _e) 블록에서 처리됩니다.
'Programming > C++_C#' 카테고리의 다른 글
[C++] friend 클래스 / 함수 (0) | 2022.09.09 |
---|---|
[c++] LPCTSTR -> LPTSTR 변환 (0) | 2022.09.08 |
[C++] test dword ptr [eax],eax ; probe page. 오류 해결 (0) | 2021.09.24 |
[C++] priority_queue (오름차순/내림차순 큐) (0) | 2021.08.31 |
[C++] string 기능 - substr/find/rfind (0) | 2021.03.30 |