Рубрики

RTTI (информация о типе времени выполнения) в C ++

В C ++ RTTI (информация о типе времени выполнения) представляет собой механизм, который предоставляет информацию о типе данных объекта во время выполнения и доступен только для классов, которые имеют хотя бы одну виртуальную функцию. Это позволяет определить тип объекта во время выполнения программы

Например, dynamic_cast использует RTTI, и следующая программа завершается с ошибкой «невозможно dynamic_cast` b '(типа `class B *') набрать` class D * '(тип источника не полиморфный) , потому что в Базовый класс B.

// Программа CPP для иллюстрации
// Идентификация типа времени выполнения
#include<iostream>

using namespace std;

class B { };

class D: public B {};

  

int main()

{

    B *b = new D;

    D *d = dynamic_cast<D*>(b);

    if(d != NULL)

        cout<<"works";

    else

        cout<<"cannot cast B* to D*";

    getchar();

    return 0;

}

Добавление виртуальной функции в базовый класс B делает ее работоспособной.

// Программа CPP для иллюстрации
// Идентификация типа времени выполнения
#include<iostream>

using namespace std;

class B { virtual void fun() {} };

class D: public B { };

  

int main()

{

    B *b = new D;

    D *d = dynamic_cast<D*>(b);

    if(d != NULL)

        cout << "works";

    else

        cout << "cannot cast B* to D*";

    getchar();

    return 0;

}

Выход:

works

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

RTTI (информация о типе времени выполнения) в C ++

0.00 (0%) 0 votes