Trong phần này, chúng ta sẽ xem RTTI (Runtime Type Information) trong C ++ là gì. Trong C ++, RTTI là một cơ chế hiển thị thông tin về kiểu dữ liệu của đối tượng trong thời gian chạy. Tính năng này chỉ có thể khả dụng khi lớp có ít nhất một chức năng ảo. Nó cho phép loại đối tượng được xác định khi chương trình đang thực thi.
Trong ví dụ sau, mã đầu tiên sẽ không hoạt động. Nó sẽ tạo ra một lỗi như “không thể dynamic_cast base_ptr (thuộc loại Base *) để nhập‘ class Derived * ’(Loại nguồn không phải là đa hình)”. Lỗi này xảy ra do không có chức năng ảo nào trong ví dụ này.
Mã mẫu
#include<iostream> using namespace std; class Base { }; class Derived: public Base {}; int main() { Base *base_ptr = new Derived; Derived *derived_ptr = dynamic_cast<Derived*>(base_ptr); if(derived_ptr != NULL) cout<<"It is working"; else cout<<"cannot cast Base* to Derived*"; return 0; }
Bây giờ sau khi thêm một phương thức ảo, nó sẽ hoạt động.
Mã mẫu
#include<iostream> using namespace std; class Base { virtual void function() { //empty function } }; class Derived: public Base {}; int main() { Base *base_ptr = new Derived; Derived *derived_ptr = dynamic_cast<Derived*>(base_ptr); if(derived_ptr != NULL) cout<<"It is working"; else cout<<"cannot cast Base* to Derived*"; return 0; }
Đầu ra
It is working