Dynamic Cast
dynamic_cast là một loại toán tử truyền trong C++ được sử dụng riêng cho tính đa hình. Nó chuyển đổi an toàn các con trỏ và tham chiếu của một lớp cơ sở sang lớp dẫn xuất của nó và kiểm tra tính hợp lệ của chuyển đổi trong thời gian chạy. Nếu chuyển đổi không hợp lệ (nghĩa là đối tượng không thuộc loại mục tiêu), nó sẽ trả về một con trỏ null thay vì tạo ra hành vi không xác định. Do đó, dynamic_cast có thể ngăn ngừa sự cố và lỗi tiềm ẩn khi sử dụng tính đa hình.
Đây là một ví dụ cơ bản về cách sử dụng dynamic_cast:
#include <iostream>
class BaseClass {
public:
virtual void display() {
std::cout << "BaseClass" << std::endl;
}
};
class DerivedClass : public BaseClass {
public:
void display() {
std::cout << "DerivedClass" << std::endl;
}
};
int main() {
BaseClass *basePtr = new DerivedClass(); // Upcasting
DerivedClass *derivedPtr;
derivedPtr = dynamic_cast<DerivedClass *>(basePtr); // Downcasting
if (derivedPtr) {
derivedPtr->display(); // đầu ra: lớp được đề xuất
} else {
std::cout << "Invalid type conversion.";
}
delete basePtr;
return 0;
}
Trong ví dụ này, một con trỏ tới một đối tượng DerivedClass được gán cho một con trỏ BaseClass (basePtr). Sau đó, chúng tôi cố gắng truyền xuống nó trở lại con trỏ DerivedClass bằng cách sử dụng dynamic_cast. Nếu truyền thành công, chúng ta có thể truy cập hàm DerivedClass thông qua con trỏ mới (derivedPtr).