[Buổi 29][Đa hình][WS] Bài 1: Polymorphic Payroll


LÀM BÀI

Points: 100
Time limit: 1.0s
Memory limit: 256M

Author:
Problem types
Allowed languages
C++

Polymorphic Payroll

Bối cảnh

Hệ thống payroll có Employee trừu tượng; FullTime và PartTime tính pay khác nhau.

Workshop dùng một collection base pointer để xử lý nhiều derived object thống nhất.

Yêu cầu

  1. Employee có id, pure virtual pay() và virtual destructor.
  2. FullTime pay = salary.
  3. PartTime pay = hours*rate.
  4. Đọc n record FT/PT, lưu Employee*, in id pay và tổng payroll; cleanup cuối.

Yêu cầu tổ chức code

Phải dùng collection base pointer/reference với virtual pay().

Online Judge chấm output. Với bài nhạy về cấu trúc OOP, giảng viên review thêm source code để xác nhận học viên luyện đúng kỹ năng.

Input

Dòng 1 n; FT: FT id salary; PT: PT id hours rate.

Output

n dòng; cuối TOTAL sum.

Ràng buộc

1≤n≤2000, các số không âm.

Ví dụ 1

Input

3
FT E1 100
PT E2 10 5
FT E3 80

Output

E1 100
E2 50
E3 80
TOTAL 230

Giải thích

FT E1 salary100 dùng implementation full-time nên pay100. PT E2 có rate10, hours5 nên pay50. FT E3 pay80. Các object được xử lý qua interface Employee nhưng virtual pay() chọn đúng derived type; tổng 100+50+80=230.

Mẫu này không chỉ kiểm tra giá trị số cuối mà còn kiểm tra dynamic dispatch. Cùng một call-site qua interface base phải chọn implementation đúng với runtime type. Nếu quên virtual, bị slicing hoặc giữ switch sai chỗ, output của một trong các loại object sẽ khác ngay ở bước trace này.

Ví dụ 2

Input

1
PT A 0 100

Output

A 0
TOTAL 0

Giải thích

PT A có rate0 và hours100 nên pay0. Dù hours lớn, công thức derived vẫn trả0; tổng payroll0. Output A 0TOTAL 0 kiểm tra behavior polymorphic ở giá trị biên.

Mẫu này không chỉ kiểm tra giá trị số cuối mà còn kiểm tra dynamic dispatch. Cùng một call-site qua interface base phải chọn implementation đúng với runtime type. Nếu quên virtual, bị slicing hoặc giữ switch sai chỗ, output của một trong các loại object sẽ khác ngay ở bước trace này.

Thông tin học tập

  • Module: M08
  • Buổi: B29
  • Loại bài: WORKSHOP
  • Độ khó: Medium
  • Concepts: abstract class, virtual pay, override, heterogeneous collection, virtual destructor
  • Giới hạn kiến thức: B01-B29
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo