Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Динамическое определение типа объекта
Для динамического определения типа объекта, на который ссылается указатель, предназначен оператор 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;
}
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов