Практикум предназначен для студентов, изучающих язык C++ на семинарах или самостоятельно. Классы, шаблоны, наследование, исключения, стандартная библиотека, UML, концепции программной инженерии (software engineering) и паттерны проектирования рассматриваются на примерах, сопровождаемых необходимыми теоретическими сведениями. Обсуждаются алгоритмы, приемы отладки и вопросы качества. По каждой теме приведено по 20 вариантов заданий. Допущено Министерством образования Российской Федерации в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлению «Информатика и вычислительная техника».
Содержание
Предисловие
От издательства
Семинар 1. Классы
Появление ООП — реакция на кризис программного обеспечения
Критерии качества декомпозиции проекта
Что принесло с собой ООП
От структуры — к классу
Задача 1.1. Поиск в массиве структур
Отладка программы
Инициализаторы конструктора
Конструктор копирования
Перегрузка операций
Перегрузка операций инкремента
Перегрузка операции присваивания
Статические элементы класса
Задача 1.2. Реализация класса треугольников
Этап 1
Тестирование и отладка первой версии программы
Этап 2
Этап 3
Этап 4
Задания
Семинар 2. Наследование
Наследование классов
Замещение функций базового класса
Конструкторы и деструкторы в производном классе
Устранение неоднозначности при множественном наследовании
Доступ к объектам иерархии
Виртуальные методы
Абстрактные классы. Чисто виртуальные методы
Отношения между классами. Диаграммы классов на языке UML
Ассоциация
Наследование
Агрегация
Зависимость
Проектирование программы с учетом будущих изменений
Задача 2.1. Функциональный калькулятор
Задача 2.2. Продвинутый функциональный калькулятор
Задача 2.3. Работа с объектами символьных и шестнадцатеричных строк
Задания
Семинар 3. Шаблоны классов. Обработка исключительных ситуаций
Шаблоны классов
Определение шаблона класса
Использование шаблона класса
Организация исходного кода
Параметры шаблонов
Специализация
Использование классов функциональных объектов для настройки шаблонных классов
Разработка шаблонного класса для представления разреженных массивов
Задача 3.1. Шаблонный класс для разреженных массивов
Обработка исключительных ситуаций
Определение исключений
Перехват исключений
Неперехваченные исключения
Классы исключений. Иерархии исключений
Спецификации исключений
Исключения в конструкторах
Исключения в деструкторах
Задача 3.2. Шаблонный класс векторов (динамических массивов)
Задания
Семинар 4. Стандартные потоки
Потоковые классы
Классы стандартных потоков
Заголовочные файлы библиотеки ввода/вывода C++
Объекты и методы стандартных потоков ввода/вывода
Обработка ошибок потоков
Перегрузка операций извлечения и вставки для типов, определенных программистом
Задача 4.1. Разработка потоковых классов, поддерживающих ввод/вывод кириллицы
Задача 4.2. Первичный ввод и поиск информации в базе данных
Задания
Семинар 5. Файловые и строковые потоки. Строки класса string
Файловые потоки
Строковые потоки
Строки класса string
Задача 5.1. Подсчет количества вхождений слова в текст
Задача 5.2. Вывод вопросительных предложений
Задания
Семинар 6. Стандартная библиотека шаблонов
Основные концепции STL
Контейнеры
Итераторы
Общие свойства контейнеров
Алгоритмы
Использование последовательных контейнеров
Задача 6.1. Сортировка вектора
Шаблонная функция print() для вывода содержимого контейнера
Адаптеры контейнеров
Использование алгоритмов
Использование ассоциативных контейнеров
Множества
Словари
Задача 6.2. Формирование частотного словаря
Задача 6.3. Морской бой
Задания
Приложение. Паттерны проектирования
Порождающие паттерны
Структурные паттерны
Паттерны поведения
Паттерн Стратегия (Strategy)
Паттерн Компоновщик (Composite)
Литература
Алфавитный указатель