C 언어
예외는 프로그램 실행 중에 발생하는 문제입니다. C++ 예외는 0으로 나누려는 시도와 같이 프로그램이 실행되는 동안 발생하는 예외적인 상황에 대한 응답입니다.
예외는 프로그램의 한 부분에서 다른 부분으로 제어를 전송하는 방법을 제공합니다. C++ 예외 처리는 try, catch,의 세 가지 키워드를 기반으로 합니다. 그리고 던지기 .
던지다 − 문제가 나타나면 프로그램에서 예외가 발생합니다. 이것은 throw를 사용하여 수행됩니다. 키워드.
잡다 − 프로그램은 문제를 처리하려는 프로그램의 위치에서 예외 처리기로 예외를 포착합니다. 잡기 키워드는 예외 포착을 나타냅니다.
시도 - 시도 블록은 특정 예외가 활성화될 코드 블록을 식별합니다. 그 뒤에 하나 이상의 catch 블록이 옵니다.
블록이 예외를 발생시킨다고 가정하면 메소드는 try 조합을 사용하여 예외를 포착합니다. 잡기 키워드. 예외를 생성할 수 있는 코드 주위에 try/catch 블록이 배치됩니다. try/catch 블록 내의 코드를 보호 코드라고 하며 try/catch를 사용하는 구문은 다음과 같습니다. -
try { // protected code } catch( ExceptionName e1 ) { // catch block } catch( ExceptionName e2 ) { // catch block } catch( ExceptionName eN ) { // catch block }
여러 catch를 나열할 수 있습니다. 시도의 경우에 대비하여 다양한 유형의 예외를 포착하는 명령문 블록은 다양한 상황에서 둘 이상의 예외를 발생시킵니다.
throw를 사용하여 코드 블록 내 어디에서나 예외를 throw할 수 있습니다. 성명. throw 문의 피연산자는 예외의 유형을 결정하며 모든 표현식이 될 수 있으며 표현식의 결과 유형은 throw되는 예외의 유형을 결정합니다.
다음은 0으로 나누는 조건이 발생할 때 예외를 던지는 예입니다 -
double division(int a, int b) { if( b == 0 ) { throw "Division by zero condition!"; } return (a/b); }
잡기 시도 후 차단 블록은 모든 예외를 포착합니다. catch할 예외 유형을 지정할 수 있으며 이는 catch 키워드 다음에 괄호 안에 나타나는 예외 선언에 의해 결정됩니다.
try { // protected code } catch( ExceptionName e ) { // code to handle ExceptionName exception }
위의 코드는 ExceptionName 예외를 포착합니다. 유형. catch 블록이 try 블록에서 throw된 모든 유형의 예외를 처리하도록 지정하려면 다음과 같이 예외 선언을 묶는 괄호 사이에 줄임표 ...를 넣어야 합니다. -
try { // protected code } catch(...) { // code to handle any exception }
다음은 0으로 나누기 예외를 throw하고 catch 블록에서 catch하는 예입니다.
라이브 데모#include <iostream> using namespace std; double division(int a, int b) { if( b == 0 ) { throw "Division by zero condition!"; } return (a/b); } int main () { int x = 50; int y = 0; double z = 0; try { z = division(x, y); cout << z << endl; } catch (const char* msg) { cerr << msg << endl; } return 0; }
const char* 유형의 예외를 발생시키기 때문에 , 그래서 이 예외를 잡는 동안 우리는 catch 블록에서 const char*를 사용해야 합니다. 위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
Division by zero condition!
C++는
다음은 위의 계층 구조에서 언급된 각 예외에 대한 간단한 설명입니다. -
Sr.No | 예외 및 설명 |
---|---|
1 | std::예외 모든 표준 C++ 예외의 예외 및 상위 클래스입니다. |
2 | std::bad_alloc 이것은 new가 던질 수 있습니다. . |
3 | std::bad_cast 이것은 dynamic_cast에 의해 발생될 수 있습니다. . |
4 | std::bad_exception 이것은 C++ 프로그램에서 예기치 않은 예외를 처리하는 데 유용한 장치입니다. |
5 | std::bad_typeid 이것은 typeid에 의해 발생될 수 있습니다. . |
6 | std::logic_error 이론적으로 코드를 읽어서 감지할 수 있는 예외입니다. |
7 | std::domain_error 수학적으로 유효하지 않은 도메인이 사용될 때 발생하는 예외입니다. |
8 | std::invalid_argument 잘못된 인수로 인해 발생합니다. |
9 | std::length_error 너무 큰 std::string이 생성될 때 발생합니다. |
10 | std::out_of_range 이것은 'at' 메서드에 의해 throw될 수 있습니다(예:std::vector 및 std::bitset<>::operator[]()). |
11 | std::runtime_error 이론적으로 코드를 읽어서 감지할 수 없는 예외입니다. |
12 | std::overflow_error 수학적 오버플로가 발생하면 throw됩니다. |
13 | std::range_error 범위를 벗어난 값을 저장하려고 할 때 발생합니다. |
14 | std::underflow_error 수학적 언더플로가 발생하면 throw됩니다. |
예외를 상속하고 재정의하여 고유한 예외를 정의할 수 있습니다. 클래스 기능. 다음은 std::exception 클래스를 사용하여 표준 방식으로 자신의 예외를 구현하는 방법을 보여주는 예입니다.
라이브 데모#include <iostream> #include <exception> using namespace std; struct MyException : public exception { const char * what () const throw () { return "C++ Exception"; } }; int main() { try { throw MyException(); } catch(MyException& e) { std::cout << "MyException caught" << std::endl; std::cout << e.what() << std::endl; } catch(std::exception& e) { //Other errors } }
이것은 다음과 같은 결과를 낳을 것입니다 -
MyException caught C++ Exception
여기, 무엇() 예외 클래스에서 제공하는 공용 메서드이며 모든 자식 예외 클래스에서 재정의되었습니다. 예외의 원인을 반환합니다.
C 언어
C++에서 파일 처리란 무엇입니까? 파일은 데이터를 저장 장치에 영구적으로 저장합니다. 파일 처리를 사용하면 프로그램의 출력을 파일에 저장할 수 있습니다. 파일에 있는 동안 데이터에 대해 다양한 작업을 수행할 수 있습니다. 스트림은 입력/출력 작업이 수행되는 장치의 추상화입니다. 스트림을 대상 또는 무기한 길이의 문자 소스로 나타낼 수 있습니다. 이것은 그들의 용도에 따라 결정될 것입니다. C++는 파일 처리를 위한 메서드와 함께 제공되는 라이브러리를 제공합니다. 논의해 봅시다. 이 C++ 자습서에서는 다음을 배우게 됩니다.
자바에서 예외란 무엇입니까? 자바의 예외 프로그램 명령의 실행을 중단하고 프로그램 실행의 정상적인 흐름을 방해하는 이벤트입니다. 메소드 내에서 발생한 오류 이벤트 정보를 래핑하여 런타임 시스템에 전달하는 객체입니다. Java에서 예외는 주로 다양한 유형의 오류 조건을 나타내는 데 사용됩니다. 이 튜토리얼에서는 배우게 될 것입니다- 예외란 무엇입니까? 예외가 필요한 이유는 무엇입니까? 예외 처리 방법 캐치 블록 시도 Java 예외 클래스 계층 구조 자바 최종 차단 두 가지 유형의 오류가 있습니다. 컴파일 시간 오류 런타임