0) 제목
Hackerrank 의 C++>Classes부분의 Exceptional Server 문제입니다.
C++ 이용하여 풀었습니다.
1) 문제설명
함수가 제대로 작동하는지 관련해서 예외처리 하는 문제입니다.
함수가 제대로 작동하는 경우 -> 함수결과 값 출력.
함수에서 메모리 할당관련 오류가 난경우 -> "Not enough memory" 출력.
C++ standard 오류가 발생했을 경우 -> "Exception : S" 출력 S는 에러 메시지.
C++ standard가 아닌 다른 오류가 발생했을 경우 -> "Other Exception" 출력.
2) 풀이과정
예외처리라고 하자마자 try, throw, catch가 생각났습니다.
예외가 발생했을때 throw를 통해서 보내는데
이때 catch에서 인자로 받을 오류들의 자료형에 대한 지식이 없어서, 구글검색해서 찾았습니다.
3) 함수설명
bad_alloc
<new>헤더에 클래스로 정의되어있습니다. (iostream에 있습니다.)
std::bad_alloc은 bac_alloc 생성자와, operator=, what() 으로 구성되어있습니다.
new를 통해서 동적할당을 할때, 동적할당이 실패하게 되면 std::bad_alloc 객체를 throw를 통해 예외처리로 보냅니다.
보내는 타입이 std::bad_alloc 임시 객체 이므로, std::bad_alloc 타입으로 받습니다.
(아래 코드에서는 using 사용하여서 std::는 생략)
standard exception
C++ standard library에서 제공해주는 기본 예외 처리 클래스. -> exception
예외가 발생하면 그 해당하는 예외의 객체를 throw 합니다. 종류로는 (bad_alloc, bad_cast, bad_exception, bad_typeid, bad_function_call, bad_weak_ptr, logic_error, runtime_error이 있습니다.
모두 exception 객체 타입으로 보내지고, 보내진 exception 객체가 어떤건지 알고싶으면 what() 함수를 사용하면됩니다.
(bad_alloc도 exception 클래스에서 객체 호출이 가능하므로, catch 를 exception 보다 위쪽에서 잡아줍니다)
standard exception에 속하지 않은 나머지 exception
catch(...)을 사용해서 예외처리 해줍니다.
4) 코드
//헤더, using namespace std 및 나머지 코드는 hackerrank 문제에 주어져있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | try{ cout << Server::compute(A, B) << endl; }catch(bad_alloc& bad){ cout << "Not enough memory" << endl; }catch(exception& exp){ cout << "Exception: " << exp.what() << endl; }catch(...){ cout << "Other Exception" << endl; } | cs |
5) 인증
경로 : Dashboard>C++>Classes>Exceptional Server
출처 : [HackerRank] https://www.hackerrank.com/challenges/exceptional-server
<참고>
http://en.cppreference.com/w/cpp/memory/new/bad_alloc
http://www.cplusplus.com/doc/tutorial/exceptions/
C하다가 C++ 하니까 헷갈리네요..
C++ 은 C 보다 더 많이 부족합니다.
더 나은 코드로 보완 할 곳이 있으면 말씀해주세요.
부족한 코드 많은 지적 부탁드립니다.
'<알고리즘 문제풀이&연습> > [C++] 백준, 프로그래머스 등등' 카테고리의 다른 글
[백준 11720] 숫자의 합 (아스키코드) (0) | 2017.07.25 |
---|---|
[C++ vector] Vector-Erase (0) | 2017.07.24 |
[C++ protected] Rectangle Area (Inheritance) (0) | 2017.07.19 |
[백준 14612] 김식당 (IUPC) (0) | 2017.07.18 |
[C 자료구조] Stack - Simple Text Editor (0) | 2017.07.14 |
[C 자료구조] Array - Left Rotation (0) | 2017.07.13 |
[C 자료구조] Tree - Is This a Binary Search Tree? (0) | 2017.07.11 |
[C++ 상속/virtual] Virtual Functions (가상함수) (0) | 2017.07.10 |