### Khái niệm về hàm ảo (Virtual Function)
**Hàm ảo** là một hàm được khai báo trong lớp cơ sở với từ khóa `virtual`. Hàm này cho phép lớp dẫn xuất (derived class) ghi đè (override) để cung cấp triển khai riêng. Hàm ảo giúp đạt được tính đa hình động, cho phép gọi hàm của lớp dẫn xuất thông qua con trỏ hoặc tham chiếu của lớp cơ sở.
### Khái niệm về tính đa hình (Polymorphism)
**Đa hình** là khả năng cho phép các đối tượng thuộc các lớp khác nhau được xử lý như thể chúng thuộc cùng một lớp cơ sở. Trong C++, có hai loại đa hình:
1. **Đa hình tĩnh (Compile-time Polymorphism)**: Đạt được thông qua phương thức nạp chồng (function overloading) và nạp chồng toán tử (operator overloading).
2. **Đa hình động (Run-time Polymorphism)**: Đạt được thông qua hàm ảo, cho phép quyết định hàm nào sẽ được gọi tại thời điểm chạy dựa trên kiểu thực tế của đối tượng.
### Ví dụ ngắn gọn
```cpp
class Base {
public:
virtual void show() { cout