ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 11) онлайн
Оператор typeid
Иногда требуется более полная информация об объекте, нежели простая вери-
фикация его классовой принадлежности. Можно узнать, например, имя типа не-
опознанного объекта, используя оператор typeid. Рассмотрим в связи с этим про-
грамму TYPEID.
Листинг 11.25. Программа TYPEID
// typeid.cpp
// демонстрация функции typeid()
// RTTI должен быть активизирован
#include <iostream>
#include <typeinfo> // для typeid()
using namespace std;
///////////////////////////////////////////////////////////
class Base
{
virtual void virtFunc() // для нужд typeid
{ }
};
class Derv1 : public Base
{ };
class Derv2 : public Base
{ };
///////////////////////////////////////////////////////////
void displayName(Base* pB)
{
cout << "указатель на объект класса "; // вывести имя класса
cout << typeid(*pB).name() << endl; //на который
//указывает pB
}
//---------------------------------------------------------
int main()
{
Base* pBase = new Derv1;
displayName(pBase); //"указатель на объект класса Derv1"
pBase = new Derv2;
displayName(pBase); //" указатель на объект класса Derv2"
return 0;
}
В этом примере функция displayName() отображает имя класса переданного
ей объекта. Для этого она использует переменную name класса type_info наряду
с оператором typeid. В main() мы передаем этой функции два объекта классов
Dervl и Derv2 соответственно. На экране видим следующее:
указатель на объект класса Dervl
указатель на объект класса Derv2
Используя typeid, кроме имени можно получить и некоторую другую ин-
формацию о классе. Например, используя перегружаемую операцию ==, можно
осуществить проверку на равенство классов. Пример этого мы покажем в про-
грамме EMPL_IO в главе 12 «Потоки и файлы». Несмотря на то что в этом разде-
ле в примерах использовались указатели, dynamic_cast и typeid работают одина-
ково хорошо со ссылками.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
Схожі підручники
- Скупой рыцарь (Сцены из ченстоновой трагикомедии The Covetous Knight) (онлайн)
- Філософія Хрестоматія (частина 2)
- ВИГОТОВЛЕННЯ НЕМЕТАЛЕВИХ МІНЕРАЛЬНИХ ВИРОБІВ БУДІВЕЛЬНОГО ПРИЗНАЧЕННЯ ТА ТЕХНОЛОГІЇ БУДІВНИЦТВА
- Задачі з курсу ЕММ
- Белая книга (частина 2) (онлайн)
- Світовий ринок послуг онлайн (частина 2)
