C++의 사용자 지정 예외

Muhammad Husnain 2023년10월12일
  1. C++의 예외 처리
  2. C++의 사용자 지정 예외
C++의 사용자 지정 예외

이 간단한 프로그래밍 자습서는 C++에서 사용자 정의 예외 클래스를 구현하고 C++에서 사용자 정의 예외 클래스를 구현하기 위한 기본 규칙에 대해 설명합니다.

C++의 예외 처리

C++에서 예외 처리는 런타임 문제를 처리하는 방법입니다. 런타임 문제가 발생하더라도 애플리케이션의 일반적인 흐름이 유지될 수 있도록 예외를 처리합니다.

C++에서 예외는 런타임 프로세스 중에 throw되는 개체이며 프로그램의 정상적인 실행을 방해합니다.

std::exception 클래스는 모든 예외의 루트입니다. 예외를 처리하지 않으면 애플리케이션은 오류 메시지를 출력하고 종료합니다.

예외를 통해 한 프로그램 영역에서 다른 프로그램 영역으로 제어를 전달할 수 있습니다. 세 개의 키워드 try, catchthrow는 C++에서 예외를 처리합니다.

  1. throw - 코드의 세그먼트가 문제를 일으킬 수 있는 경우 throw 키워드를 사용하여 예외를 발생시키고 발생할 수 있는 예외 유형을 지정합니다.
  2. try - 오류를 일으킬 수 있고 예외를 throw해야 하는 코드 세그먼트가 포함되어 있습니다.
  3. catch - 예외가 발생했을 때 호출되는 블록입니다. 이 코드 블록에서 사용자에게 오류에 대해 알리고 필요한 경우 프로그램을 프로그래밍 방식으로 종료할 수 있습니다.

예외의 일반적인 예는 런타임에 발생하는 0으로 나누기 오류입니다. 프로그램에서 가장 자주 발생하는 예외입니다.

0으로 나누기 런타임 예외가 발생하기 쉬운 다음 코드 스니펫을 살펴보겠습니다.

#include <iostream>
using namespace std;
float divideFunc(int a, int b) {
  if (b == 0) {
    throw "User made a division with zero!";
  }
  return (a / b);
}
int main() {
  int num1 = 20;
  int num2 = 0;
  float result = 0;
  try {
    result = divideFunc(num1, num2);
    cout << result << endl;
  } catch (const char* msg) {
    cout << msg << endl;
  }
}

출력:

0 런타임 예외로 나누기

예외 클래스 계층

예외는 많은 클래스를 하위 클래스로 포함하는 클래스이며 이러한 클래스는 모두 예외 유형입니다. C++에는 프로그램에서 쉽게 사용할 수 있도록 미리 정의된 공통 예외 유형 집합이 있습니다.

예외 클래스 계층

C++의 사용자 지정 예외

C++에 지정되지 않은 사용자 지정 예외는 특정 상황에서 생성하는 데 도움이 될 수 있습니다. C++에서는 특정 기준을 충족하는 모든 유형이 catch되거나 throw될 수 있습니다.

여기에는 유효한 복사 생성자와 소멸자가 있는 형식이 포함됩니다.

사용자 정의 예외는 문제에 대한 유용한 정보와 함께 예외 처리 메커니즘을 제공합니다. 필요한 속성을 가진 새 클래스를 만들고 해당 클래스의 인스턴스를 던지거나 std::exception에서 상속하고 what() 함수를 재정의하여 만들 수 있습니다.

프로그램에서 양수 입력을 얻어야 한다고 가정합니다. 음수가 입력되면 예외를 throw할 수 있습니다.

다음과 같이 사용자 정의 예외 클래스를 만들 수 있습니다.

class MyExceptionClass : public exception {
 public:
  const char* what() const throw() { return "Negative number not allowed\n"; }
};

이것은 다음과 같이 드라이버 프로그램에서 잡을 수 있습니다.

int main() {
  try {
    int a;
    cout << "Enter a number : \n";
    cin >> a;
    if (a < 0) {
      MyExceptionClass c;
      throw c;
    } else {
      cout << "you entered: " << a << endl;
    }
  } catch (exception& e) {
    cout << e.what();
  }
}

출력:

예외 출력

위의 코드에서 Exception 클래스를 사용하여 사용자 정의 예외 클래스를 상속했고 예외가 발생했을 때 호출될 what() 메서드를 재정의했음을 알 수 있습니다.

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

관련 문장 - C++ Exception