Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

RTTI (Thông tin kiểu tại runtime) trong C++

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ế, 드러 lộ thông tin về kiểu dữ liệu của đối tượng trong lúc chạy (runtime). Tính năng này chỉ khả dụng khi lớp có ít nhất một hàm ảo (virtual function). Nó cho phép xác định kiểu của đối tượng khi chương trình đang thực thi.

Trong ví dụ sau, code đầu tiên sẽ không hoạt động. Nó sẽ sinh ra lỗi như "cannot dynamic_cast base_ptr (of type Base*) to type 'class Derived*' (Source type is not polymorphic)". Lỗi này xảy ra vì không có hàm ảo trong ví dụ này.

Mã ví dụ (không có virtual function - lỗi)

#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 phương thức ảo, nó sẽ hoạt động.

Mã ví dụ (có virtual function - hoạt động)

#include <iostream>
using namespace std;

class Base {
    virtual void function() {
        // hàm rỗng
    }
};

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;
}

Kết quả đầu ra

It is working