본문 바로가기
42seoul/circle-4

[ CPP05 ] 0. 과제이해하기

by saniii 2022. 8. 3.

예외처리에 대해 공부해봅시다.

 

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)

 

 

  • Bureaucrat 클래스에 
    • signForm() 이라는 함수를 추가해라
      • 이 함수는 서류를 싸인하면 다음과 같은 메세지를 출력한다. 
        • bureaucrat signed form
        • bureaucrat couldnt sign form because reason

 


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

댓글