[Buổi 29][Đa hình][HW] Bài 2: Media Play


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

Media Play

Bối cảnh

Một playlist trộn Audio và Video. Base Media định nghĩa virtual play(), hai derived class trả chuỗi khác nhau: Audio prefix A:, Video prefix V:. Hệ thống đọc nhiều item và gọi play qua base pointer để không cần nhiều nhánh xử lý sau khi object đã được tạo.

Homework Easy nhấn mạnh collection polymorphic và virtual destructor. Sau khi dùng các object tạo động, cần giải phóng qua base pointer an toàn.

Ở 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

  1. Media abstract với virtual play().
  2. Audio trả A:title; Video trả V:title.
  3. Đọc n item, dùng base pointers, in mỗi kết quả.

Input

Dòng 1 n; n dòng A title hoặc V title.

Output

n dòng.

Ràng buộc

1≤n≤1000, title là token.

Ví dụ 1

Input

3
A Song
V Film
A Podcast

Output

A:Song
V:Film
A:Podcast

Giải thích

Ba runtime object là Audio Song, Video Film, Audio Podcast. Cùng lời gọi play() tạo lần lượt A:Song, V:Film, A:Podcast, mỗi item một dòng.

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
A X

Output

A:X

Giải thích

Chỉ có Audio X nên override Audio được gọi và output A:X. Không cần nhánh riêng ở bước phát sau khi object đã được tạo.

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: abstract class, polymorphic behavior, override
  • 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