Có thể bạn sẽ có câu hỏi về ví dụ ở trang trình bày trước. Tại sao chúng ta không được phép lệnh cho thú cưng của chúng ta tạo ra âm thanh ? Chúng ta biết một điều hiển nhiên là cả chó và mèo đều có thể tạo ra âm thanh, vậy vấn đề là gì ?
Vấn đề xuất phát từ kiểm tra tĩnh (static checks) được thực hiện bởi trình biên dịch trong quá trình biên dịch. Trình biên dịch chỉ biết rằng Pet không thể tạo ra âm thanh và sẽ không cho phép chúng ta cố gắng làm điều đó.
Chúng ta – những lập trình viên đẹp trai, có thể làm cho trình biên dịch thay đổi ý định của nó không ?
Có, chúng ta có thể sử dụng các toán tử cast. Cái đầu tiên trong số chúng có thể được sử dụng trong ngữ cảnh này, nó được gọi là static_cast. Chúng ta sử dụng nó khi chúng ta muốn tác động đến trình biên dịch với một thông điệp đại loại như sau:
Tao thề là tao biết chắc chắn những gì tao đang làm và tao muốn sử dụng con trỏ của lớp cha để thao tác trên đối tượng của lớp con. Tao đảm bảo rằng tao sử dụng các đối tượng thích hợp. Mày cứ để cho tao làm thế đi trình biên dịch ơi. Nếu có vấn đề gì xảy ra, tao sẽ chịu hoàn toàn trách nhiệm.
Toán tử static_cast trông như thế này →
target_type là tên của kiểu dữ liệu mà ta muốn trình biên dịch sử dụng khi đánh giá giá trị của an_expression.
Ví dụ: câu lệnh sau
1 |
static_cast <Dog *> (a_pet) |
buộc trình biên dịch giả định rằng a_pet được (tạm thời) chuyển thành một con trỏ kiểu Dog *.