Лекция 31. Динамическая информация о типе Красс Александр Alexander.Krass@gmail.com СПбГУ ИТМО, 2009.

Презентация:



Advertisements
Похожие презентации
Лекция 13. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
Advertisements

Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Лекция 10. Введение в ООП. Часть 3 Красс Александр СПбГУ ИТМО, 2008.
Лекция 21. Шаблоны (часть 1) Красс Александр СПбГУ ИТМО, 2008.
Лекция 30. Преобразования типов в C++ Красс Александр СПбГУ ИТМО, 2009.
Лекция 15. Введение в ООП. Часть 6 Красс Александр СПбГУ ИТМО, 2008.
Лекция 8. Введение в ООП. Часть 1 Красс Александр СПбГУ ИТМО, 2008.
Лекция 9. Введение в ООП. Часть 2 Красс Александр СПбГУ ИТМО, 2008.
Лекция 24. Практика. Закрепление материала Красс Александр СПбГУ ИТМО, 2008.
1 Программирование на языке Си++. 2 Модуль 8. УПРАВЛЕНИЕ ИСКЛЮЧЕНИЯМИ Применение операторов try, catch, throw Динамическая идентификация типов времени.
Полиморфизм. Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Лекция 7 Приведение типов. Классификация типов Типы С++ Пользовательские Встроенные (Фундаментальные) Адресные Арифтметические void Указатели Ссылки Массивы.
Лекция 13 Производные классы и открытое наследование. Подбельский гл , Страуструп гл , Мейрс пп Открытое наследование производного.
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Информационные технологии Стандартные библиотечные функции манипулирование данными преобразование и шифрование определение пользователями функций.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 4 Работа с бинарными файлами (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков.
Транксрипт:

Лекция 31. Динамическая информация о типе Красс Александр СПбГУ ИТМО, 2009

RTTI Определение RTTI Оператор typeid

Определение RTTI RTTI - Run-time Type Information (Динамическая идентификация типа данных) - механизм, реализованный в языках программирования, который позволяет определить тип данных переменной или объекта во время выполнения программы. В принципе RTTI позволяет выполнять совершенно потрясающие вещи: –Сериализация любых данных для записи в файл или передачи по сети К сожалению, в C++ RTTI имеет очень бедный функционал. Он позволяет только узнать имя типа своего аргумента. Для этого используется оператор typeid.

Оператор typeid Имеет следующий синтаксис: const type_info& typeid(expression) Класс type_info имеет следующий открытый интерфейс: class type_info { public: virtual ~type_info(); int operator==(const type_info& rhs) const; int operator!=(const type_info& rhs) const; int before(const type_info& rhs) const; const char* name() const; private:... }; Операторы == и != могут использовать для проверки того, что два выражения имеют (не имеют) один и тот же тип. Функция name возвращает имя типа. Формат возвращаемой строки зависит от реализации Функция before реализует аналог оператора <. Однако результат ее выполнения может быть разный в разных программах или даже при нескольких запусках одной и той же программы.

Аргументом typeid может быть или тип или выражение В случае применения typeid к полиморфному типу он производит проверку во время выполнения для выяснения того, на какой реально ссылается его аргумент. Для этого аргумент должен быть: 1. Ссылкой 2. Разыменованным указателем 3. Элементом массива (arr[i])

6 Спасибо за внимание Вопросы?