[Buổi 31][Củng cố OOP nâng cao][Lab] Bài 1: Polymorphism Bug Clinic


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

Polymorphism Bug Clinic

Bối cảnh

Một hierarchy Shape bị bug vì base method không virtual.

Hãy sửa để gọi đúng behavior derived qua base pointer.

Yêu cầu

  1. Shape có virtual name() và virtual destructor.
  2. Circle/Rectangle override.
  3. Đọc type và in name qua Shape*.

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

Phải dùng virtualoverride.

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

C hoặc R.

Output

CIRCLE hoặc RECTANGLE.

Ràng buộc

Chỉ C/R.

Ví dụ 1

Input

C

Output

CIRCLE

Giải thích

Input C tạo runtime object Circle. Lời gọi qua base interface phải in CIRCLE; nếu quên virtual, code dễ gọi nhầm implementation base. Mẫu này chính là bug clinic kiểm tra dynamic dispatch đã được sửa đúng.

Mẫu này kiểm tra pipeline ở mức tích hợp: input đi qua validation, chọn runtime behavior, cập nhật aggregate rồi mới sinh output. Nếu một bước thất bại, fallback/ERROR phải đúng contract và các summary phía sau không được tính nhầm dữ liệu lỗi. Vì vậy trace mẫu chính là kiểm tra invariant xuyên suốt workflow.

Ví dụ 2

Input

R

Output

RECTANGLE

Giải thích

Input R tạo Rectangle và cùng call-site polymorphic in RECTANGLE. Việc C và R cho hai output khác nhau chứng minh object không bị slicing và method virtual đang hoạt động đúng.

Mẫu này kiểm tra pipeline ở mức tích hợp: input đi qua validation, chọn runtime behavior, cập nhật aggregate rồi mới sinh output. Nếu một bước thất bại, fallback/ERROR phải đúng contract và các summary phía sau không được tính nhầm dữ liệu lỗi. Vì vậy trace mẫu chính là kiểm tra invariant xuyên suốt workflow.

Thông tin học tập

  • Module: M08
  • Buổi: B31
  • Loại bài: LAB
  • Độ khó: Medium
  • Concepts: polymorphism, virtual destructor, object slicing, override, debugging
  • Giới hạn kiến thức: B01-B31
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo