Динамическая идентификация типа

Динамическая идентификация типа

Динамическая идентификация типа данных (англ. Run-time Type Information, Run-time Type Identification, RTTI) — механизм, реализованный в языках программирования, который позволяет определить тип данных переменной или объекта во время выполнения программы.

Содержание

Реализация

Существует множество реализаций такого механизма, но наиболее распространенные —

  • ведение таблицы указателей на объекты
  • хранение информации об объекте в памяти вместе с ним

Таким образом, операция определения типа сводится либо к поиску в таблице, либо к просмотру нескольких байт до адреса, на который указывает указатель на объект. У каждого способа есть свои преимущества и недостатки.

C++

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

Оператор dynamic_cast пытается выполнить приведение к указанному типу с проверкой. Целевой тип операции должен быть типом указателя, ссылки или void*.

  • Если целевой тип — тип указателя, то аргументом должен быть указатель на объект класса.
  • Если целевой тип — ссылка, то аргумент должен также быть соответствующей ссылкой.
  • Если целевым типом является void*, то аргумент также должен быть указателем, а результатом операции будет указатель, с помощью которого можно обратиться к любому элементу «самого производного» класса иерархии, который сам не может быть базовым ни для какого другого класса.

Оператор typeid возвращает ссылку на структуру type_info, которая содержит поля, позволяющие получить информацию о типе.

Delphi

Компилятор Borland Delphi сохраняет в исполняемом файле программы информацию о всех классах, используемых в ней — в виде структур определенного формата. При создании любого объекта в памяти перед ним (по отрицательным смещениям) располагается заголовок, в котором есть в том числе ссылка на структуру-описатель класса это объекта. Встроенные в язык функции работают с этой информацией прозрачно для программиста. Оператор is позволяет проверить является ли объект или тип наследником определённого типа, оператор as является аналогом dynamic_cast в C++

Заголовки объектов — также неявно — используются для автоматического управления памятью.

C#

В C# для определения типа объекта во время исполнения используется метод GetType, а также ключевые слова is и as, которые являются аналогами для typeid и dynamic_cast в C++ соответственно.



Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "Динамическая идентификация типа" в других словарях:

  • Динамическая идентификация типа данных — Не следует путать с динамической типизацией. Динамическая идентификация типа данных (англ. Run time type information, Run time type identification, RTTI)  механизм в некоторых языках программирования, который позволяет определить тип… …   Википедия

  • Приведение типа — (type conversion) преобразование значения переменной одного типа в значение другого типа. Выделяют явное и неявное приведения типов. При явном приведении указывается тип переменной, к которому необходимо преобразовать исходную переменную. При… …   Википедия

  • Тип данных — (встречается также термин вид данных)  фундаментальное понятие теории программирования. Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и, возможно, способ реализации хранения значений и… …   Википедия

  • Валютный тип — Тип данных Содержание 1 История 2 Определение 3 Необходимость использования типов данных …   Википедия

  • Типизация данных — Тип данных  фундаментальное понятие теории программирования. Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям, и, возможно, способ реализации хранения значений и выполнения операций. Любые… …   Википедия

  • Ruby — Класс языка: мультипарадигмальный: динамический, объектно ориентиров …   Википедия

  • printf — printf  обобщённое название семейства функций или методов стандартных или широкоизвестных коммерческих библиотек, или встроенных операторов некоторых языков программирования, используемых для форматного вывода  вывода в различные потоки …   Википедия

  • dynamic_cast — В языке программирования C++, оператор dynamic cast является частью механизма динамической идентификации типа данных, который позволяет выполнять приведение типа данных. В отличие от обычного приведения типа в стиле Си, проверка корректности… …   Википедия

  • Интроспекция (программирование) — У этого термина существуют и другие значения, см. Интроспекция. Интроспекция (англ. type introspection) в программировании  возможность в некоторых объектно ориентированных языках определить тип и структуру объекта во время выполнения… …   Википедия

  • Математическая модель — Математическая модель  это математическое представление реальности[1]. Математическое моделирование  это процесс построения и изучения математических моделей. Все естественные и общественные науки, использующие математический аппарат,… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»