ВУЗ:
Составители:
Рубрика:
28
Тогда итератор будет вызываться, например, для дополнительного
параметра типа int, так:
gr.ForEach(pf,25);
Здесь gr объект-группа.
Динамическая идентификация типов
Динамическая идентификация типа характерна для языков, в кото-
рых поддерживается полиморфизм. В этих языках возможны ситуации, в
которых тип объекта на этапе компиляции неизвестен.
В С++ полиморфизм поддерживается через иерархии классов, вирту-
альные функции и указатели базовых классов. При этом указатель базово-
го класса может использоваться либо для указания на объект базового
класса, либо для указания на объект любого класса, производного от этого
базового.
Пусть группа содержит объекты различных классов и необходимо
выполнить некоторые действия только для объектов определенного класса.
Тогда в итераторе мы должны распознавать тип очередного объекта.
В стандарт языка С++ включены средства RTTI (Run-Time Type
Idendification) динамическая идентификация типов. Эти средства реали-
зованы в последних системах Borland C++ (версий 4.0 и выше).
Информацию о типе объекта получают с помощью оператора typeid,
определение которого содержит заголовочный файл <typeinfo.h>.
Имеется две формы оператора typeid:
typeid (объект)
typeid (имя_типа)
Оператор typeid возвращает ссылку на объект типа type_info.
В классе type_info перегруженные операции == и != обеспечивают
сравнение типов.
Функция name () возвращает указатель на имя типа.
Имеется одно ограничение. Оператор typeid работает корректно
только с объектами, у которых определены виртуальные функции. Боль-
шинство объектов имеют виртуальные функции, хотя бы потому, что
обычно деструктор является виртуальным для устранения потенциальных
проблем с производными классами. Когда оператор typeid применяют к
неполиморфному классу (в классе нет виртуальной функции), получают
указатель или ссылку базового типа.
Примеры.
1.
#include<iostream.h>
#include<typeinfo.h>
Страницы
- « первая
- ‹ предыдущая
- …
- 24
- 25
- 26
- 27
- 28
- …
- следующая ›
- последняя »