예외처리에 대해 공부해봅시다.
c++ 에서의 예외처리 기본 형식은 다음과 같다.
try {
//실행할 구문
예외를 발견하면 {
throw ZZZ;
// ZZZ는 예외 발생을 알리는 값
}
}
catch (예외 발생을 알리는 값){
//파라미터로 전달된 예외상황이 오면 실행할 구문 (예외처리문)
}
ex00
예외처리 클래스는 OCCP를 지키지 않아도 된다.
먼저 이 거대한 곳(bureaucrat machine)에서 작은 톱니부터 시작해보자.
Bureaucrat은 다음을 꼭 가져야 합니다.
- constant name
- 1부터 150까지 범위의 grade
- 1이 가장 높고, 150이 가장 낮은겁니다.
- 그리고 유효하지 않은 범위에 대해서 초기화하려고 하면 다음의 예외를 던지세요
- Bureaucrat::GradeTooHighException or a Bureaucrat::GradeTooLowException.
다음 속성들에 대해 getter를 제공하세요. (-> getName, getGrade)
임원 등급을 올리고 내리는 두 멤버함수를 구현해라. 만약 등급이 범위를 벗어나면 둘 다 생성자에서와 같은 예외를 던질 것이다.
You will implement an overload of the insertion («) operator to print something like (without the angle brackets): , bureaucrat grade . As usual, turn in some tests to prove everything works as expected.
ex01
이제 임원들을 데리고 있으니 그들에게 할 일을 줍시다. 서류더미들을 만들도록 할거에요(아마도 이런 의미겠지,,?)
Form 클래스를 만듭시다.
- private
- const name
- 결제가 되었는지 아닌지 표현하는 불린값 (생성자에서 false로 초기화)
- const grade -> 결제를 할 수 있는 레벨을 의미
- const grade -> 실행할 수 있는 레벨을 의미
- public
- Form의 grade는 임원들과 같은 규칙을 가진다. grade범위에 따른 예외
- Form::GradeTooHighException and Form::GradeTooLowException
- 앞의 예제와 같이 값들에 대한 getter를 가지고, << 를 오버로딩해서 서류의 모든 정보들을 출력할 수 있도록 한다.
- Bureaucrat을 파라미터로 가지는 beSigned() 멤버함수를 추가해라
- 이 함수는 결제가능레벨이상의 bureaucrat이면 서류의 싸인현황을 바꿀 수 있다. (false->true)
- Form의 grade는 임원들과 같은 규칙을 가진다. grade범위에 따른 예외
- Bureaucrat 클래스에
- signForm() 이라는 함수를 추가해라
- 이 함수는 서류를 싸인하면 다음과 같은 메세지를 출력한다.
- bureaucrat signed form
- bureaucrat couldnt sign form because reason
- 이 함수는 서류를 싸인하면 다음과 같은 메세지를 출력한다.
- signForm() 이라는 함수를 추가해라
ex02
할일을 ㄷ ㅓ만들어 보자ㅏ
모든 경우에서 기본 클래스 Form은 추상클래스여야 한다. form의 속성은 그 base class에서 privated으로 유지되어야한다.
다음을 따르는 구현 클래스를 추가해라.
- ShrubberyCreationForm: Required grades: sign 145, exec 137
- <target>_shrubbery 를 working directory에 생성하고 아스키 트리를 써라.
- RobotomyRequestForm: Required grades: sign 72, exec 45
- 드릴 소음을 만든다.
- 원하는 출력문장이 있음
- PresidentialPardonForm: Required grades: sign 25, exec 5
- 원하는 출략 문장 존재함
이들 모두 그들의 생성자에 하나의 파라미터를 가집니다. -> 이 문서의 대상 예를 들면 target= home 이면 당신은 home에 shrubbery를 심고싶어서 이 문서를 만든겁니다.
이제 execute라는 const 멤버함수를 base class에 추가하세욥. 그리고 이 baseclass를 상속받은 구현 클래스에서 execute의 동작을 구현합니다. 당신은 이 form이 결재받았는지 확인하고 buceaucrat의 등급을 확인한다음에 등급이 가능하면 실행합니다. 만일 아니라면 예외를 throw 하세요.
모든 구현클래스에서 요구를 확인하거나 아니면 기본클래스(부모클래스)에서 해도 됩니다. 하고 싶은대로 하세요. 그러나 둘중 한 방법이 더 깔쌈한 방법입니다.
마지막으로 bureaucrat 클래스에 executeForm 멤버 함수를 추가하세요. 이건 form을 execute하려고 시도합니다. 성공하면 다음과 같이 출력합니다. <bureaucrat> executed
실패하면 명확한 에러 메세지를 출력하세요.
그만하고 싶다 cpp 과제.....재미없어..... c++는 괜찮은데 cpp과제는 재미없어....... 재미있게라도 만들던가........;;;;;;;
이번과제는 03도 있어옹....
ex03
form을 채우는 것은 귀찮은 일이기 때문에 우리는 bureaucrat들에게 하루종일 이걸 하라고 할 수 없어요. 다행히도 인턴들이 있습니다.
이번에는 인턴 class을 구현할겁니다.
인턴들은 이름이 없고, 등급도, 특별한 특성도 없어요 단지 bureaucrat이 걱정하는 (하기 싫어하는? 이런 뜻?) 일을 할겁니다.
(주관적인 '번역'으로 실제 과제에서 의미하는 바와 틀릴 수 있읍니다....)
인턴들은 makeForm()ㅣ라는 함수가 있습니다. 이 함수는 2개의 string변수가 필요해요. 하나는 서류의 이름을 담을거고, 나머지는 form의 대상이 될겁니다. 이것은 Form객체의 포인터를 반환합니다.
다음의 문장을 출력합니다. Intern creates <form>
당신은 코드를 예쁘게 만들도록 노력해야합니다. if/elseif 덕지덕지로 못생기게 만드는 것을 지양하세요. 이런 못생긴 코드는 평가에서 인정되지 않아요. 당신은 더이상 피시너가 아니니까요. 당연히, 모든것이 예상한대로 작동하는지 확인해야합니다.
'42seoul > circle-4' 카테고리의 다른 글
[ CPP07 ] 0. 과제이해하기 (0) | 2022.08.06 |
---|---|
[ CPP06 ] 0. 과제이해하기 (0) | 2022.08.06 |
[ CPP04 ] 0. 과제이해하기 (0) | 2022.08.02 |
[ CPP03 ] 0. 과제이해하기 (0) | 2022.08.01 |
[NetPractice] 01. need to know (0) | 2022.07.31 |
댓글