[Buổi 29][Đa hình][HW] Bài 1: Transport Fare
Transport Fare
Bối cảnh
Một hệ thống vận tải có interface/base Transport với method virtual fare(distance). Bus tính 5 đơn vị/km, Train tính10 đơn vị/km. Bài Easy không yêu cầu nhiều object; mục tiêu là thấy cùng lời gọi fare(d) qua pointer/reference base cho kết quả khác tùy runtime type.
Hãy dùng virtual method và tránh if bên trong base để phân biệt loại phương tiện; selection type chỉ diễn ra khi tạo object.
Ở B29, sau khi runtime object đã được tạo, phase xử lý nên làm việc thông qua interface base. Nếu code tiếp tục if/switch theo type trong từng phép tính, polymorphism chưa thực sự được sử dụng. Base cần virtual destructor nếu object bị xóa qua base pointer, và collection phải tránh object slicing để dynamic type được giữ nguyên.
Yêu cầu
- Transport abstract có
fare(distance). - Bus/Taxi override.
- Đọc type và distance; gọi qua base pointer.
Input
B d hoặc T d.
Output
Một số nguyên.
Ràng buộc
0≤d≤1e9.
Ví dụ 1
Input
B 10
Output
50
Giải thích
Type B tạo Bus. Với distance10, dynamic dispatch gọi Bus::fare và tính 5*10=50, output 50.
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
T 10
Output
100
Giải thích
Type T tạo Train; cùng distance10 nhưng override Train tính 10*10=100. Cùng interface khác runtime type nên output 100.
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: HOMEWORK
- Độ khó: Easy
- Concepts: polymorphism, virtual method, override
- Giới hạn kiến thức: B01-B29
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments