Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lect09.pdf
Скачиваний:
5
Добавлен:
06.02.2016
Размер:
492.28 Кб
Скачать

Оператор dynamic_cast

Оператор приведения типа dynamic_cast позволяет выполнить безопасное приведение ссылки или указателя на один типданных кдругому

Проверкадопустимостиприведениятипа осуществляетсявовремяработыпрограммы

Вслучаенекорректного приведениябудет возвращенNULL (вслучаеприведения указателей)иливыброшеноисключение std::bad_cast (приприведенииссылок)

dynamic_castиспользуетRTTI,т.е.

нуженхотябы1виртуальныйметод

Пример 1 - указатели

class Animal

{

public:

virtual ~Animal() {} };

class Bird

: public Animal {};

class Eagle

: public Bird {};

Пример 1 - указатели

class Mammal

: public Animal {};

class Cat

: public Mammal {};

class Rabbit

: public Mammal {};

Пример 1 - указатели

void PrintAnimalType(Animal const * pAnimal)

{

if (dynamic_cast<Rabbit const*>(pAnimal) != NULL) std::cout << "Rabbit\n";

else if (dynamic_cast<Cat const*>(pAnimal) != NULL) std::cout << "Cat\n";

else if (dynamic_cast<Eagle const*>(pAnimal) != NULL) std::cout << "Eagle\n";

else if (dynamic_cast<Mammal const*>(pAnimal) != NULL) std::cout << "Some unknown type of mammals\n";

else if (dynamic_cast<Bird const*>(pAnimal) != NULL) std::cout << "Some unknown type birds\n";

else

std::cout << "Some unknown type of animals\n";

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]