[Buổi 29][Đa hình][Lab] Bài 2: Abstract Shape Area
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
- Shape có pure virtual
area()và virtual destructor. - Circle/Rectangle override area().
- Đọ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