Имя типа во время выполнения в C++
Оператор typeid возвращает ссылку
на объект std::type_info, описывающий
тип выражения.
Для полиморфного класса и ссылки или указателя
на базу учитывают фактический тип объекта
в памяти. Строку из метода name
компилятор формирует по своим правилам,
но ее все равно полезно вывести для
проверки. Подключим <typeinfo>
и напечатаем имя через базовую ссылку:
#include <iostream>
#include <typeinfo>
class Shape {
public:
virtual ~Shape() = default;
};
class Circle : public Shape {};
int main() {
Circle disk;
Shape& link = disk;
std::cout << typeid(link).name() << "\n";
return 0;
}
Сделайте полиморфный Node и
потомка Leaf. Сохраните
Leaf в ссылке Node&
и выведите typeid для этой
ссылки через name.
Объявите Widget с виртуальным
деструктором и Panel, наследующий
его. Напечатайте typeid для
объекта Panel, хранимого
как Widget&.