Динамическое определение типа объекта

Для динамического определения типа объекта, на который ссылается указатель, предназначен оператор typeid. Результат выполнения для полиморфных и не полиморфных объектов отличается. Прежде чем использовать оператор, необходимо подключить файл typeinfo. Оператор имеет следующий формат:

#include <typeinfo>
<Экземпляр класса type_info> = typeid(<Объект или тип>);

В качестве значения оператор typeid возвращает экземпляр класса type_info. Этот экземпляр можно сравнить с другим экземпляром того же класса, используя операторы == (равно) и != (не равно). Получить название типа объекта позволяет метод name(). Пример использования оператора typeid приведен в листинге 13.31.

Листинг 13.31. Динамическое определение типа объекта

#include <iostream>
#include <typeinfo>

class A {
public:
   virtual void func(); // Виртуальный метод
   virtual ~A() {}      // Деструктор
};
class B : public A {
public:
   void func() override;
};

void A::func() { std::cout << "A::func()" << std::endl; }
void B::func() { std::cout << "B::func()" << std::endl; }

int main() {
   A *pA, a;
   B b;
   pA = &a;
   std::cout << typeid(*pA).name() << std::endl; // 1A
   pA = &b;
   std::cout << typeid(*pA).name() << std::endl; // 1B
   if (typeid(*pA) == typeid(B)) {
      std::cout << "class B" << std::endl;       // class B
   }
   return 0;
}

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов