-
윤성우 열혈 C++ 프로그래밍 15장) 예외처리(try, catch, throw, 스택풀기, 예외클래스, 예외 객체)PROGRAMMING/C++ 2024. 1. 15. 07:03
책 정리 거의 막바지네요ㅎㅎ 달려봅니다!
(혹시 저작권에 문제가 있다면 수정하겠습니다!! 개인적인 공부용으로 정리함을 알려드립니당)
https://product.kyobobook.co.kr/detail/S000001589147
예외의 3요소
- 예외의 발생 위치
- 그 예외가 발견된 위치
- 예외가 처리되는 위치
▪️ 일반적으로는 예외의 발생 위치와 예외가 발견되는 위치가 다르다.
try, catch and throw
try : 예외발생에 대한 검사의 범위 지정
- try 블록 내에서 예외가 발생하면 catch 블록이 실행되고 나서 예외가 발생한 지점 이후를 실행하는 것이 아니라, catch 블록의 이후가 실행
- 블록을 묶는 기준 : 하나의 일 단위를 구성해서 묶음
int Func(int num) throw(int, char){..} // 예외의 종류 명시 int Fun1(void) throw(){..} // 예외 전달시 terminate
catch : try 블록에서 발생한 예의를 처리하는 코드
- try 바로 뒤에 catch가 등장해야 하므로 하나의 문자처럼 기억하자!
- 1개의 try와 다수의 catch 가능(대신 catch의 순서대로 실행 - 상속관계에서는 유도 클래스의 예외부터 적어놓을 것)
throw : 예외가 발생했음을 알리는 문장
- throw절에 의해 던져진 예외 데이터 == catch블록의 매개변수 자료형 (아니면 예외처리 안됨)
- 예외가 처리되지 않으면, 예외가 발생한 함수를 호출한 영역으로 예외 데이터가 전달! (스택 풀기 - Stack Unwinding)
- 예외 데이터를 전달한 함수는 종료된다.
try{ // if(예외가 발생한다면) throw expn; } catch(type expn){ // 예외 처리 }
예외 클래스와 예외객체
class DepositException{ private : int reqDep; public : DepositException(int money) reqDep)(money){} void ShowExceptionReason(){ cout << "[예외메시지 : " << reqDep << "는 입금불가]" << endl;} } class Account{ void Deposit(int money) throw(DepositionException){ if(money < 0) { throw DepositException(money);} balance += money; } ... }
'PROGRAMMING > C++' 카테고리의 다른 글
Modern C++ 알아보기 (4) 2024.03.17 윤성우 열혈 C++ 프로그래밍 16장) C++의 형 변환 연산자 (2) 2024.01.15 윤성우 열혈 C++ 프로그래밍 13,14장) 템플릿(template)(함수 템플릿, 템플릿 함수, 클래스 템플릿, 템플릿 클래스, 특수화, 부분 특수화) (0) 2024.01.12 윤성우 열혈 C++ 프로그래밍 11장) 연산자 오버로딩 2(대입연산자, 오버로딩, 함수 오버로딩, 스마트포인터, 펑터) (2) 2024.01.08 윤성우 열혈 C++ 프로그래밍 10장) 연산자 오버로딩 1(operator+, operator++, operator-, operator--, operator<<) (1) 2024.01.07