[Buổi 29][Đa hình][Lab] Bài 2: Abstract Shape Area


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

Abstract Shape Area

Bối cảnh

Shape chỉ mô tả interface area(), không có công thức chung.

Circle và Rectangle cung cấp implementation riêng.

Yêu cầu

  1. Shape có pure virtual area() và virtual destructor.
  2. Circle/Rectangle override area().
  3. Đọc một shape và in area 2 decimals qua Shape*.

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

Phải dùng pure virtual area() và virtual destructor.

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 r hoặc R w h.

Output

Một số 2 decimals.

Ràng buộc

0≤r,w,h≤1e6; dùng pi=3.141592653589793.

Ví dụ 1

Input

C 1

Output

3.14

Giải thích

Input C 1 tạo Circle thông qua interface abstract Shape. Method area() được override và tính π·1²≈3.14159; format hai chữ số nên output 3.14. Base chỉ quy định contract, còn công thức thật nằm ở derived class.

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

R 3 4

Output

12.00

Giải thích

Input R 3 4 tạo Rectangle. Lời gọi area() qua Shape sử dụng override của Rectangle và cho 3*4=12; format thành 12.00. Ví dụ kiểm tra cùng interface nhưng hai implementation khác nhau.

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: LAB
  • Độ khó: Medium
  • Concepts: abstract class, pure virtual, polymorphism, 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