Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
21 слайд
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
102.97 kB
Просмотров:
81
Скачиваний:
0
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд![Осенний семестр Преподаватель](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img0.jpg)
Содержание слайда: Осенний семестр 2017
Преподаватель: асс. каф. Чуканов В.С
№2 слайд![Содержание Исключения](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img1.jpg)
Содержание слайда: Содержание
Исключения
Исключения в конструкторах и деструкторах
Операторы приведения типов
Постановка задачи: разбор аргументов командной строки
Описание базового класса переменной
Описание произвольной переменной
Менеджер переменных
№3 слайд![Исключения Механизм](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img2.jpg)
Содержание слайда: Исключения
Механизм исключений
Регламентирует редко случающиеся ситуации, влекущие радикальные изменения в текущем поведении программы либо прекращение ее работы
Код, генерирующий исключения
Помещается в блок try { }
Исключения создаются вызовом throw [exception_object];
Код, обрабатывающий исключения
Помещается в блок catch {}
№4 слайд![Объекты-исключения Семантика](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img3.jpg)
Содержание слайда: Объекты-исключения
Семантика
Данные об ошибке
std::exception
Базовый класс исключения в стандартной библиотеке
Все исключения стд. библиотеки наследованы от std::exception
Объекты-исключения
В качестве объекта-исключения может выступать любой класс
Классы исключений могут быть организованы в иерархию
№5 слайд![Обработка исключений catch](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img4.jpg)
Содержание слайда: Обработка исключений
catch блоки обрабатываются в порядке объявления
catch (…) { }
Ловит любое исключение
Должен быть объявлен последним
catch (BaseClass &b)
Должен быть объявлен после всех наследников
№6 слайд![Обработка исключений](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img5.jpg)
Содержание слайда: Обработка исключений
Обработка исключения = развертка стека вызовов
При возникновении исключения поиск обработчика заканчивается во внешнем блоке try .. catch, в который «обернут» main (winmain)
Попадание в этот блок ведет к вызову функции terminate()
Возникновение исключения во время развертки стека = вызов terminate()
№7 слайд![Исключения в конструкторах и](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img6.jpg)
Содержание слайда: Исключения в конструкторах и деструкторах
Исключение в конструкторе
Объект не является созданным, и тело деструктора не будет вызвано
Деструкторы предков и полей вызываются в стандартном порядке
Исключение в деструкторе
При возникновении на этапе развертки стека вызовов приведет к вызову terminate()
Следует избегать ОБА ВАРИАНТА использования исключений
№8 слайд![Операторы приведения типов](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img7.jpg)
Содержание слайда: Операторы приведения типов
type_to_cast a = static_cast <type_to_cast> (b);
Приведение объекта b к типу type_to_cast
Проверка уровня компиляции
type_to_cast *a = dynamic_cast <type_to_cast*> (b);
Используется для приведения типов с проверкой в run-time (RTTI, run-time type info)
При неудаче вернет NULL
type_to_cast &a = dynamic_cast <type_to_cast&> (b);
В случае ошибки порождает исключение std::bad_cast
const_cast
Снимает модификаторы const и volatile
reinterpret_cast
Максимально небезопасное приведение типов
Конвертация указателя в int, любого типа в любой другой
№9 слайд![Ассоциативный контейнер map](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img8.jpg)
Содержание слайда: Ассоциативный контейнер map
std::map
Отсортированная структура данных, состоящая из пар ключ-значение
Реализует красно-черное дерево
Тип «ключа» должен иметь оператор сравнения
Операции (ключ = std::string)
Объявление std::map<std::string, int> mymap;
Добавление mymap[“firstVal”] = 10;
Поиск
std::map<std::string, int>::iterator – тип итератора по контейнеру
std::map<std::string, int>::iterator it = mymap.find(“firstVal”);
it == mymap.end() – верно в случае отсутствия элемента в контейнере
№10 слайд![Разбор аргументов командной](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img9.jpg)
Содержание слайда: Разбор аргументов командной строки
Параметры ком. строки
Пара «имя» «значение»
Значение может быть произвольного типа
Значение считывается из строки
Задача: разработать класс для обработки командной строки
Регистрация имени новой переменной
Установка значения по умолчанию для переменной
Возврат значения по имени переменной
Заполнение значений переменных по массиву argV и кол-ву аргументов argC
№11 слайд![Класс переменной Пара имя -](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img10.jpg)
Содержание слайда: Класс переменной
Пара «имя» - «значение»
Переменная = значение
Класс переменной
Унифицированный интерфейс для хранения значения любого типа
Интерфейс для извлечения значения любого типа из строки
№12 слайд![Базовый класс переменной](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img11.jpg)
Содержание слайда: Базовый класс переменной
Любой унифицированный интерфейс = базовый класс
№13 слайд![Класс переменной реализация](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img12.jpg)
Содержание слайда: Класс переменной: реализация
Потомок = шаблон
Для каждого фиксированного типа реализуется set_value()
Хранение любых наследников возможно по указателю на базовый класс
№14 слайд![Менеджер переменных Поля](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img13.jpg)
Содержание слайда: Менеджер переменных
Поля
№15 слайд![Регистрация новой переменной](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img14.jpg)
Содержание слайда: Регистрация новой переменной
Тип неизвестен = шаблонный метод
Тип специализации класса-переменной = типу специализации метода регистрации переменной
№16 слайд![Получение значения переменной](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img15.jpg)
Содержание слайда: Получение значения переменной
Для указания значения переменной необходимо указать тип
Метод - шаблонный
Алгоритм
Поиск по имени переменной
Тип специализации метода = тип специализации наследника variable
Приведение к типу наследника
dynamic_cast
№17 слайд![Получение значения переменной](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img16.jpg)
Содержание слайда: Получение значения переменной: реализация
№18 слайд![Закрытый метод set value](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img17.jpg)
Содержание слайда: Закрытый метод set_value
Поиск переменной и установка значения
№19 слайд![Парсинг командной строки](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img18.jpg)
Содержание слайда: Парсинг командной строки
№20 слайд![Указание реализаций set value](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img19.jpg)
Содержание слайда: Указание реализаций set_value
Компилятору необходимо указать реализации для всех используемых в коде специализаций variable
№21 слайд![Заключение Исключения](/documents_6/ea589c305ee4185e4804a29ab34ae7a8/img20.jpg)
Содержание слайда: Заключение
Исключения
Механизм детектирования и обработки ошибок
Необходимо избегать возникновения исключений в к-торах и д-торах
Приведение типов
static_cast – проверка только на уровне компиляции (ближе к C-style)
dynamic_cast – проверка в run-time
Составление контейнеров объектов разных типов
Требует дополнительной иерархии
Наследник = шаблон
Хранение по указателю на базовый класс
Может требовать dynamic_cast