Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 예외 처리 기본 사항

<시간/>

C++에서 예외 처리는 런타임 오류를 처리하는 프로세스입니다. 예외는 C++에서 런타임에 throw되는 이벤트입니다. 모든 예외는 std::exception 클래스에서 파생됩니다. 처리할 수 있는 런타임 오류입니다. 예외를 처리하지 않으면 예외 메시지를 출력하고 프로그램을 종료합니다.

예외는 C++ 표준에서 프로그램 내에서 사용할 수 있는 <예외> 클래스로 정의됩니다. 부모-자식 클래스 계층 구조의 배열은 다음과 같습니다.

C++의 예외 처리 기본 사항

C++의 일반적인 예외 클래스는 다음과 같습니다.

예외 설명
std::예외 이것은 모든 표준 C++ 예외의 예외이자 상위 클래스입니다.
std::bad_cast dynamic_cast가 던진 예외입니다.
std::bad_exception 이 예외는 C++ 프로그램에서 예기치 않은 예외를 처리하는 데 사용됩니다.
std::bad_alloc 일반적으로 new에 의해 발생합니다.
std::logic_failure 이 예외는 코드를 읽어 감지할 수 있습니다.
std::runtime_error 이 예외는 코드를 읽어서 감지할 수 없습니다.
std::bad_typeid typeid에 의해 발생한 예외입니다.

키워드:

예외 처리에는 try, catch 및 throw의 3가지 키워드가 있습니다.

차단 시도/캐치:

C++에서 예외 처리는 try/catch 문을 사용하여 수행됩니다. 예외가 발생할 수 있는 코드는 Try 블록으로 배치하는 데 사용됩니다. catch 블록은 예외를 처리하는 데 사용됩니다.

예시 코드

#include <iostream>
using namespace std;
class Sample1 {
   public:
   Sample1()
   {
      cout << "Construct an Object of sample1" << endl;
   }
   ~Sample1()
   {
      cout << "Destruct an Object of sample1" << endl;
   }
};
class Sample2 {
   public:
   Sample2()
   {
      int i=7;
      cout << "Construct an Object of sample2" << endl;
      throw i;
   }
   ~Sample2()
   {
      cout << "Destruct an Object of sample2" << endl;
   }
};
int main() {
   try {
      Sample1 s1;
      Sample2 s2;
   } catch(int i) {
      cout << "Caught " << i << endl;
   }
}

출력

Construct an Object of sample1
Construct an Object of sample2
Destruct an Object of sample1
Caught 7

사용자 정의 예외:

예외 클래스 기능을 상속 및 재정의하여 자체 예외를 정의할 수 있습니다.

예시 코드

#include <iostream>
#include <exception>
using namespace std;
struct DivideByZero : public exception {
   const char * what () const throw () {
      return "My Exception";
   }
};
int main() {
   try {
      throw DivideByZero();
   } catch(DivideByZero& e) {
      cout << "Exception caught" << endl;
      cout << e.what() << endl;
   } catch(exception& e) {
   }
}

출력

Exception caught
My Exception
what() = A public method provided by exception class and it has been
overridden by all the child exception classes. It returns the cause of an
exception.