Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Программированию.doc
Скачиваний:
71
Добавлен:
11.02.2015
Размер:
1.22 Mб
Скачать

Лекция 16. Rtti и приведение типов

Аббревиатура RTTI означает RunTime Type Identification, т. е. «Идентификация типа времени выполнения». Это механизм, позволяющий определить тип объекта во время выполнения программы.

Операция typeid

Для получения информации о типе во время выполнения программы применяется операция typeid:

typeid(имя_ типа) typeid(выражение)

Ее операндом является либо имя типа, либо выражение, оцениваемое как некоторый тип. Операция возвращает константную ссылку на объект класса type_info, объявленный в заголовке typeinfo.h.

Открытые элементы класса представлены операциями сравнения на равенство и неравенство, а также функциями name() и before(). Первая возвращает указатель на символьную строку с именем типа. Вторая возвращает true, если класс ее объекта является базовым по отношению к классу аргумента.

Если операция не может определить тип своего операнда, она выбрасывает исключение типа bad_typeid.

#include <typeinfo.h>

#include <iostream.h>

template <class T1, class T2>

void f(T1 p1, T2 p2)

{

cout<<"p1="<<p1<<" Type - "<<typeid(p1).name()<<endl;

cout<<"p2="<<p2<<" Type - "<<typeid(p2).name()<<endl;

if (typeid(p1)==typeid(p2))

cout<<"Types are equivalent"<<endl;

else cout<<"Types are not equivalent"<<endl;

}

int main(int argc, char* argv[])

{

f(6, 6.2);

f(6, 6);

getchar();

return 0;

}

Программа выводит:

p1=6 Type - int

p2=6.2 Type - double

Types are not equivalent

p1=6 Type - int

p2=6 Type - int

Types are equivalent

145