Menu
CoddyTech

振り返り - 従業員の階層構造

CoddyのGDScriptジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 20/65。

challenge icon

チャレンジ

中級

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オンラインコンパイラ