Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Gabriel93
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 8
#1

Обработки исключительных ситуаций - C++

18.03.2012, 16:09. Просмотров 537. Ответов 3
Метки нет (Все метки)

Объясните, что от меня хотят, а то уже мозг кипит ...
7. Не абстрактный класс В является производным от абстрактного класса А. Определить обработчик исключительной ситуации при преобразовании ссылки на класс В в ссылку на абстрактный класс.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2012, 16:09     Обработки исключительных ситуаций
Посмотрите здесь:

C++ Обработка исключительных ситуаций
C++ Написать класс обработчик исключительных ситуаций.
Обработка исключительных ситуаций. C++
Ограничения исключительных ситуаций f(.)throw(.){} C++
C++ Обработка исключительных ситуаций
Обработка исключительных ситуаций C++
C++ Придумать 10 задач на обработку исключительных ситуаций
C++ Обработка исключительных ситуаций!
Обработка исключительных ситуаций C++
Обработка исключительных ситуаций C++
C++ Обработка исключительных ситуаций
Обработка исключительных ситуаций C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.03.2012, 16:55     Обработки исключительных ситуаций #2
нужно знать для чего нужен dynamic_cast и его особенности.
если кратно, то он позволяет кастить указатель на базу в указатель на производный тип с проверкой.
если каст невозможен, результат каста будет нулевой указатель. тоже самое можно делать с сылками. но так как нулевых ссылок не бывает, в этом случае при невозможности преобразования кидается стандартное исключение std::bad_cast которое и нужно обрабатывать.

ну т.е. в коде это выглядит как-то так:

C++
1
2
3
4
5
6
7
8
9
 // baseRef - ссылка на базу
 try
 {
    Der& der = dynamic_cast<Der&>(baseRef);
 }
 catch (const std::bad_cast& error)
 {
    std::cout << error.what() << std::endl;
 }
Кстати преобразование ссылки на производный класс в ссылку на базовый класс происходит без всяких исключений. Это преобразование либо отрабатывает, либо программа просто не скомпилируется (если конечно это делать без всяких хаков).
Исключения могут быть при преобразовании из базового класса в производные. Т.е. у вас задание какое-то кривое.
Gabriel93
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 8
18.03.2012, 18:06  [ТС]     Обработки исключительных ситуаций #3
Спасибо за объяснение.
О RTTI ранее читал, но поскольку мы это не учили в университете, об этом как-то не вспоминал ..,
Кстати преобразование ссылки на производный класс в ссылку на базовый класс происходит без всяких исключений. Это преобразование либо отрабатывает, либо программа просто не скомпилируется (если конечно это делать без всяких хаков).
Этого результата я добился...
Исключения могут быть при преобразовании из базового класса в производные. Т.е. у вас задание какое-то кривое.
Я в курсе и о первом и о втором. К сожалению это уже не первый случай, когда дают плохо сформировано задание.

Тему можно закрывать.
iStark
0 / 0 / 0
Регистрация: 15.04.2013
Сообщений: 10
15.04.2013, 10:23     Обработки исключительных ситуаций #4
Ребята, может кого не затруднит написать код программы полностью? В универе задали такое же задание, но вот уровень подготовки куда ниже чем у автора топика, если можна с минимальными комментариями?

Добавлено через 7 часов 58 минут
Буду благодарен хотя бы за краткий пример того, как реализуеться "ссылка на базу" в данном случае...

Добавлено через 20 минут
Спасибо, разобрался сам
Yandex
Объявления
15.04.2013, 10:23     Обработки исключительных ситуаций
Ответ Создать тему
Опции темы

Текущее время: 08:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru