C++ - Module 05 과제해석

이호용·2021년 9월 14일
0

cpp

목록 보기
13/16

C++ - Module 05

Repetition and Exceptions
반복 그리고 예외

Summary: This document contains the subject for Module 05 of the C++ modules.

Exercise 00: Mommy, when I grow up, I want to be a bureaucrat!

엄마 난 커서 관료가 되고 싶어!

Mommy, when I grow up, I want to be a bureaucrat!
Turn-in directory : ex00/
Files to turn in : Makefile Bureaucrat.hpp Bureaucrat.cpp main.cpp
Forbidden functions : None

엄마, 나는 커서 관료가 되고 싶어요.

Please note that exception classes do not need to be in orthodox canonical form.
Every other class needs to be written in that way.
Today, we’re going to create an artificial nightmare of offices, corridors, forms, and
waiting in line. Sounds fun? No? Too bad.

예외 클래스는 전통 정식일 필요가 없습니다.
다른 모든 클래스는 올바른 방식으로 작성해야합니다.
오늘날 우리는 사무실, 복도, 형태, 줄을 서서 기다리는 인공적인 악몽을만들 예정입니다.
듣기만 해도 신나지? 나닌가? 안됐네 크크크..(미친거 아냐?ㅎ.ㅎ)

First, we start by the smallest cog in the vast bureaucratic machine: the Bureaucrat.

먼저 우리는 거대한 관료적 기계에서 가장작은 톱니바퀴인 관료제부터 시작합니다.

It must have a constant name, and a grade, that ranges from 1 (highest possible) to
150 (lowest possible). Any attempt to create a Bureaucrat with an invalid grade must
throw an exception, which will be either a Bureaucrat::GradeTooHighException or a
Bureaucrat::GradeTooLowException.

이것은 constant 이름을 가져야합니다. 그리고 범윙는 1(가장높은 값)에서 150(가장낮은 값)까지 입니다.
유효하지 않은 범위로 관료를 생성하려는 모든 시도는 모두 제외해야합니다.
유효하지 않을경우 Bureaucrat::GradeTooHighException() 또는 Bureaucrat::GradeTooLowException() 로 처리.

You will provide getters for both these attributes (getName and getGrade), and two
functions to increment or decrement the grade. Both these functions will throw the same
exceptions as before if the grade gets too high or too low. Remember, grade 1 is highest,
150 is lowest, so incrementing a grade 3 gives you a grade 2...
당신은 두 속성(getName 및 getGrade)에 대한 getter와 등급을 낮추고 증가시키는 두가지 함수를 제공할수 있습니다.
등급이 너무 높거나 낮은경우 모두 같은 예외를 던집니다. 기억해, 등급1이 가장 높고 150이 가장 낮다. 그래서 등급을 증가하면 3은 2가 된다.

The exceptions you throw must be catchable by a block like:
니가 던진 예외를 잡을수 있어야한다. 다음과 같은 블록으로:

try
{
/* do some stuff with bureaucrats */
}
catch (std::exception & e)
{
/* handle exception */
}

관료들과 어떤일을 해라
예외처리

You will provide an overload of the << operator to ostream that outputs something like <name>, bureaucrat grade <grade>.

<name>, 관료 등급 <grade>와 같은 것을 출력하는 << 연산자의 오버로드를 ostream에 제공합니다

Of course, you will provide a main function to prove you did all this well.
물론, 너는 메인함수에서 모든작업을 잘 수행햇음을 증명할 것입니다.

Exercise 01: Form up, maggots!

일해라 구더기들아!

Form up, maggots!
Turn-in directory : ex01/
Files to turn in : Same as before + Form.cpp Form.hpp
Forbidden functions : None

Now that we have bureaucrats, better give them something to do with their time.
What better occupation than a stack of forms to fill out?

이제 우리는 관료를 가지고 있으니, 그들에게 시간을 할에할 기회를 주는것이 좋습니다.
작성하는 양식을 가득채워주자, 더나은 직업이 있습니까?

Make a Form class. It has a name, a boolean indicating whether it is signed (at
the beginning, it’s not), a grade required to sign it, and a grade required to execute it. The name and grades are constant, ​and all these attributes are private (not protected).
The grades are subject to the same constraints as in the Bureaucrat,
form 클래스를 만들고. 그것은 name, bool 타입을 가진 변수 signed (만들어질 땐 not(false)로 초기화), 서명에 필요한 grade, 그리고 실행에 필요한 grade.을 가집니다.
이름 그리고 등급은 const이며, 그리고 모든 속성은 private이다.
등급들은 Bureaucrat, 예외와 같은 제약조건이 적용됩니다. 그들 중 하나라도 범위를 벗어나면 Form::GradeTooHighException and Form::GradeTooLowException.이 적용됩니다.

Same as before, make getters for all attributes, and an overload of the << operator
to ostream that completely describes the state of the form.
동일하게 모든 속성에 getters를 만들어라., 그리고 오버로드 <<operator는 form의 상태를 완전히 ㅣ설명하는 ostream으로 만들어라.

You will also add a beSigned function that takes a Bureaucrat, and makes the form signed if the bureaucrat’s grade is high enough. Always remember, grade 1 is better than
grade 2. If the grade is too low, throw a Form::GradeTooLowException.
beSigned함수를 더 하자. 그것은 매게변수로 Bureaucrat를 가진다., 그리고 form의 서명을 만든다. 만약 bureaucrat의 듭급이 높다면. 항당 기억하자. 1이 2보다 높다.
만약 등급이 낮으면 Form::GradeTooLowException.를 던지자.

Also add a signForm function to the Bureaucrat. If the signing is successful, it will
print something like " signs

", otherwise it will print something
like " cannot sign because ".
또한 Bureaucrat에 signForm 함수를 더하자. 만약 서명에 성공하면, 그것은 " signs "를 출력하고 그외에는 " cannot sign because " 출력한다.

Add whatever’s needed to test this to your main.
더한건 main에서 테스트가 필요하다.

Exercise 02: No, you need form 28B, not 28C...

아니 너는 form 28B가 필요하다. 28C가 아냐.

Turn-in directory : ex02/
Files to turn in : Same as before + ShrubberyCreationForm.[hpp,cpp]
RobotomyRequestForm.[hpp,cpp] PresidentialPardonForm.[hpp,cpp]
Forbidden functions : None

Now that you have basic forms, you will make a few forms that actually do something.
이제 기본 forms이 생겻으니, 너는 실재로 무언가를 할 몇몇의 form을 만들것입니다.

Create a few concrete forms:
생성할 몇 가지 form:

ShrubberyCreationForm (Required grades: sign 145, exec 137). Action: Create
a file called <target>_shrubbery, and write ASCII trees inside it, in the current
directory.

ShrubberyCreationForm (요청 grades : sign 145, exec 137)
행동: 현재 디렉토리에 <target>_shrubbery라는 파일을 만듭니다, 그리고 ASCII로 이루어진 트리를 만듭니다..

• RobotomyRequestForm (Required grades: sign 72, exec 45). Action: Makes some
drilling noises, and tell us that has been robotomized successfully 50% of
the time. Otherwise, tell us it’s a failure.
• PresidentialPardonForm (Required grades: sign 25, exec 5). Action: Tells us
has been pardoned by Zafod Beeblebrox.

All of these will have to take only one parameter in their constructor, which will
represent the target of the form. For example, "home" if you want to plant shrubbery at
home. Remember the form’s attributes need to remain private, and in the base class.
모든 것들은 하나의 매게변수를 가진 생성자를 가질수 있다, 그것은 form을 대표합니다. 예를들어, 집에서 관목을 심고 싶다면, "home"이라고 하면된다.

기억하자, form의 속성은 기본 클래스에서 비공개로 유지되어야 함을 기억하십시오.

Now you need to add a method execute(Bureaucrat const & executor) const to
the base form, and implement a method executing the form’s action in all the concrete
forms. You have to check that the form is signed, and that the bureaucrat attempting to
execute the form has a high enough grade, else you will throw an appropriate exception.

이제 excutee(Bureaucrat const & executor) const 메소드를 만들자 기본 form안에, 그리고 excuteing form은 모든 form을 생성한다. 너는 form이 signed인지 확인하고, 그리고 bureaucrat가 실행하기에 충분히 높은지 확인하다. 만약 아ㅣㄴ면, 예외를 던질수 잇다. 니가 이 체크를 모든 구체적인 클래스에서 이러한 검사를 수행하거나, 기본 클래스에 체크인을 수행한 다음 작업을 실행하기 위해 다른 메서드를 호출하는 것은 사용자에게 달려있지만, 한가지 방법은 다른것 보다 이쁘다.

Finish this by adding an executeForm(Form const & form) function to the bureaucrat. It must attempt to execute the form, and if it’s a success, print something like
executes . If not, print an explicit error message.

  • 마지막으로 bureaucrat에 executeForm(Form const & form) 함수를 추가할 것. 이 함수는 form을 실행하고 성공하면 " executes 을 출력 아니라면 명시적인 오류메시지를 출력할것

Exercise 03: At least this beats coffee-making

적어도 이것은 커피 만드는것 보단 낫습니다.

Because filling out forms is annoying enoughh, it would just be cruel to ask our bureaucrats to write them entirely by themselves. No, we’ll just have an intern do that.
양식을 작성하는건 충분히 귀찮은 일이기 때문에, 관료들에게 완전히 스스로 작성하게 하는건 잔인한 일입니다. 우리는 인턴에게 일을 맡길수 있습니다.

You’re going to create the Intern class. The intern has no name, no grade, no defining characteristics whatsoever, we only care that it does its job.
너는 인턴 클래스를 생성한다. 인턴은 이름, 범위, 정의된 특성이 없습니다. 우리는 오직 오직 그들이 제 일을하는것에만 관심을 가집니다.

The intern has one important thing, the makeForm function. It takes two strings, the
first representing the name of a form, and the second one being the target for the form.
It will return, as a pointer to Form, a pointer to whichever concrete form class is represented by the first parameter, initialized with the second parameter
인턴에는 중요한 일이 하나 있습니다, makeForm 함수.두개의 문자열을 가지고, 첫번쨰는 form의 이름을 나타내고. 두번째는 target 을 가리킵니다.
Form의 포인트를 반환할수 있고,

0개의 댓글