ex00
try & catch
- 예외가 생긴 경우
throw
를 쓰고 전달하고 싶은 객체를 써준다.
- 아무 객체나 던져도 상관 없지만 표준 라이브러리에 여러 예외가 미리 정의되어 있음. 이를 사용하면 좋음.
- throw 한 위치에서 즉시 함수가 종료되고
예외처리
부분으로 점프. (가장 가까운 catch문으로 점프)
- stack에 생성했던 객체들을 모두
소멸
시켜줌!(소멸자로)
생성자에서 예외처리
- !! 생성자에서 예외를 던질 때는 소멸자가 호출되지 않기 때문에 catch에서 잘 해제시켜줘야 한다.
예외처리 순서
- catch문의 경우 가장 먼저 대입될 수 있는 객체를 받는다.
기반 클래스 객체
, 파생 클래스 객체
순으로 catch문을 작성하게 되면 기반 클래스 포인터
에 연결된 파생 클래스 포인터
의 경우 기반 클래스
catch문으로 들어가 버리게 된다.
- 때문에 catch문은
파생 클래스
, 기반 클래스
순으로 catch할 수 있도록 작성하는 것이 좋다.
모든 예외 객체 catch
catch(...)
를 쓰면 try
안에서 발생한 모든 예외들을 받을 수 있다.
ex01
ex02
- Form class를 abstract class로 만들고 이를 바탕으로 concreate class를 만든다.
- execute 관련한 exception 하나 더 만들어야 함
- 관목 생성 폼
- target + shrubbery 파일을 생성하고 그 안에 ascii tree를 넣으면 됨
- Zaphod Beeblebrox에 의해 사면되는 form
ex03
- Intern class를 만들어야 함
- form list를 배열로 만들어 매핑해서 사용
- formName과 formType을 원소로 갖는 formList struct 선언하고 formList 배열 선언 후 makeForm에서 사용
- formList를 form 종류에 맞게 초기화
{"presidential pardon", new PresidentialPardonForm(target)},
{"robotomy request", new RobotomyRequestForm(target)},
{"shrubbery creation", new ShrubberyCreationForm(target)},
{"", NULL}}
- formList에서 만드려는 form이 있는지 찾은 후 있다면 해당 formType을 리턴