振り返り - 従業員の階層構造
CoddyのGDScriptジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 20/65。
チャレンジ
中級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には2つの静的関数があります。role(p)は、pの最も具体的なクラスであるManager、Engineer、Employee、またはPersonを返します。total_monthly(people)は、従業員である人(manager と engineer を含む)のmonthly_pay()の合計を返します。
各コンストラクターは親クラスの値を super() に渡し、親クラスの結果を拡張するオーバーライドではすべて super() を使用します。
提供されたコードは、続く人数を読み取った後、1人につき1行で次のいずれかを読み取ります: 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オンラインコンパイラ