복습 - 직원 계층 구조
Coddy GDScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 65개 중 20번째.
챌린지
중급5개의 파일에 걸쳐 회사의 클래스 계층 구조를 만드세요.
Person: 생성자로 설정하는person_name과age를 가집니다.introduce()는Hi, I'm NAME, AGE years old.를 반환합니다.Employee는Person을 상속하고employee_id(String)와salary(연봉, int)를 추가합니다.introduce()를 재정의하여 부모의 텍스트 뒤에My employee ID is ID.를 추가합니다.monthly_pay()는 급여를12.0으로 나눈 값을 반환합니다.Manager는Employee를 상속하고department를 추가합니다. 이 클래스의monthly_pay()는 직원 급여에1.2를 곱한 값이며,manage_team()은Managing the DEPARTMENT department.를 반환합니다.Engineer는Employee를 상속하고language를 추가합니다.code()는Coding in LANGUAGE.를 반환합니다.Payroll에는 정적 함수가 두 개 있습니다.role(p)는p의 가장 구체적인 클래스인Manager,Engineer,Employee또는Person을 반환합니다.total_monthly(people)은 직원인 사람들(관리자와 엔지니어 포함)의monthly_pay()합계를 반환합니다.
각 생성자는 부모의 값을 super()에 전달하며, 부모의 결과를 확장하는 모든 재정의 함수는 super()를 사용합니다.
제공된 코드는 먼저 뒤따르는 사람의 수를 읽고, 각 사람에 대해 한 줄씩 읽습니다. 형식은 person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT 또는 engineer NAME AGE ID SALARY LANGUAGE입니다. 각 사람에 대해 대괄호 안에 역할과 introduce()를 출력하고, 직원이면 월급을 출력하며, 해당하는 경우 manage_team() 또는 code()를 출력하고, 마지막에 합계를 출력합니다. employee Alice 35 E123 60000와 manager Bob 45 M54 85000 Marketing에 대해 다음을 출력합니다:
[Employee] Hi, I'm Alice, 35 years old. My employee ID is E123.
Monthly pay: 5000.00
[Manager] Hi, I'm Bob, 45 years old. My employee ID is M54.
Monthly pay: 8500.00
Managing the Marketing department.
Total monthly payroll: 13500.00코드는 person.gd, employee.gd, manager.gd, engineer.gd 및 payroll.gd에 작성하세요. main.gd에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.
직접 해보기
extends Node
func _ready():
# 제공된 입출력 코드: 그대로 유지하세요
var count := int(OS.read_string_from_stdin())
var people: Array[Person] = []
for i in count:
var p := OS.read_string_from_stdin().split(" ")
if p[0] == "manager":
people.append(Manager.new(p[1], int(p[2]), p[3], int(p[4]), p[5]))
elif p[0] == "engineer":
people.append(Engineer.new(p[1], int(p[2]), p[3], int(p[4]), p[5]))
elif p[0] == "employee":
people.append(Employee.new(p[1], int(p[2]), p[3], int(p[4])))
else:
people.append(Person.new(p[1], int(p[2])))
for person in people:
print("[%s] %s" % [Payroll.role(person), person.introduce()])
if person is Employee:
print("Monthly pay: %.2f" % (person as Employee).monthly_pay())
if person is Manager:
print((person as Manager).manage_team())
elif person is Engineer:
print((person as Engineer).code())
print("Total monthly payroll: %.2f" % Payroll.total_monthly(people))
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 GDScript 컴파일러