[Buổi 29][Đa hình][Lab] Bài 1: Virtual Speak
Virtual Speak
Bối cảnh
Cùng một lời gọi speak() nhưng hành vi phụ thuộc object thực tế.
Bài tập minh họa dynamic dispatch qua base pointer.
Yêu cầu
- Base Animal có virtual
speak(). - Dog override trả WOOF, Cat override trả MEOW.
- Đọc type D/C và gọi speak qua
Animal*.
Yêu cầu tổ chức code
Phải gọi qua base pointer/reference và dùng virtual + override.
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
Một ký tự D hoặc C.
Output
Một từ.
Ràng buộc
Chỉ D hoặc C.
Ví dụ 1
Input
D
Output
WOOF
Giải thích
Biến/con trỏ base được dùng để gọi speak() trên object Dog. Vì method là virtual, dynamic dispatch chọn implementation của Dog thay vì Base, nên output WOOF. Đây chính là khác biệt cốt lõi giữa gọi method thường và polymorphic call.
Ví dụ 2
Input
C
Output
MEOW
Giải thích
Khi runtime object là Cat, cùng lời gọi qua interface base lại chọn Cat::speak() và in MEOW. Hai ví dụ D/C cùng một call-site nhưng khác output chứng minh behavior phụ thuộc dynamic type.
Thông tin học tập
- Module: M08
- Buổi: B29
- Loại bài: LAB
- Độ khó: Easy
- Concepts: virtual functions, override, base pointer, dynamic dispatch
- Giới hạn kiến thức: B01-B29
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments