Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpOpIhFCs 77 of 150 menu
◀ ▶

Неудачное приведение в C++

Приведение вниз имеет смысл только если объект действительно того типа, к которому мы сужаем указатель.

Для указателя dynamic_cast при неудаче возвращает пустой адрес. Его записывают nullptr: объекта по этому адресу нет. Так не вызывают метод потомка у чужого объекта. Запишем обычный User, попробуем получить Student* и выведем результат проверки:

class User { public: virtual ~User() { } }; class Student : public User { };

Создадим объект User и попробуем привести указатель вниз:

int main() { User* base = new User(); Student* student = dynamic_cast<Student*>(base); if (student) { std::cout << "student\n"; } else { std::cout << "not student\n"; } delete base; return 0; }

Сохраните в User* объект базового класса, попробуйте привести его к Employee* и выведите сообщение, если указатель оказался пустым.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить