ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 예외처리
    @ 16. 1 ~ 17. 1/C++ 2015. 3. 28. 23:32

    익셉션은 두 부분으로 구성된다.

    익셉션을 처리하기 위한 try / catch 부분

    익셉션을 발생시키기 위한 throw 부분

    (익셉션이 동작하려면 이 부분이 존재해야만 한다.)

     

    try

    {
    throw //익셉션이 발생할 코드

    }

    catch (exceptio-type1 exception-name)
    {

      // type1 익셉션을 받아서 처리할 코드

    }

    //익셉션이 발생하지 않으면 실행되는 코드

     

     

    예)

    void g()
    {
     throw 2;
    }

    void f()
    {
     try
     {
      g();
     }
     catch (int i)
     {
      cout << "caught in f : " << i << endl;
      throw;
     }
    }

    int main()
    {
     try
     {
      f();
     }
     catch (int i)
     {
      cout << "caught in mani: " << i << endl;
     }
     _getch();
     return 0;
    }

     

    여기서는 throw를 현재 받은 익셉션을 그대로 재전송하기 위한 용도로 사용

    catch(뒤에 이것은 throw를 받는 형을 쓰면됨)

    (예를들어 throw가 int 형인 3이라면 throw 3;

    catch(int a)이런식으로 수정이 되어야 한다)

    : throw로 던질 데이터는 어떤 타입이든 사용가능하다. 

    종종 char *타입의 문자열을 던지는데 이방법은 설명을 포함할수 있기때문에 유용함.

    근데 보통은 객체 전달이 좋음.(왜냐면 여러종류의 데이터 전달하니까..)

    근데 되도록이면 const을 붙이자 catch(const 객체...)

     

    복수의 익셉션 주고받기

    물론 서로 다른 익셉션 타입을 사용할 수도 있음.

    모든 익셉션에 대해 매칭하고 싶다면?(catch 하고 싶다면!)

    catch(...)

    {
    }

    이렇게 하면되는데..그닥..가능한 익셉션 종류를 모두 알 수 있는 상황이라면 각기 따로 하는게 나음.

     

     

    '@ 16. 1 ~ 17. 1 > C++' 카테고리의 다른 글

    전문가를 위한 C++ 정리(3)  (0) 2015.04.21
    전문가를 위한 C++ 정리(2)  (0) 2015.04.13
    전문가를 위한 C++ 정리(1)  (0) 2015.03.28
    멤버 함수가 객체 자신을 리턴하는 경우  (1) 2014.10.27
    함수 포인터 배열  (0) 2014.10.27
Designed by Tistory.