Начиная писать эту книгу, я рассчитывал уложиться в 500 страниц. Однако работа оказалась настолько увлекательной, что я писал и писал. Материала накопилось значительно больше, чем требовалось, поэтому кое-чем пришлось пожертвовать. В книгу не попали темы, связанные с управлением динамической памятью: интеллектуальные указатели, механизм malloc()/f гее(), перегрузка операций new и delete. Пришлось отказаться и от описания процедурной библиотеки ввода-вывода <cstdio>. Не попал в книгу материал по обобщенному и порождающему программированию. К большому моему сожалению, не получилось «втиснуть» в рамки книги достаточно полное описание стандартной библиотеки шаблонов STL, а краткий «конспект» мало полезен. Библиотека шаблонов — слишком обширная тема, чтобы ее можно было изложить в паре-тройке десятков страниц1. Однако можно обнаружить довольно частые упоминания о ней при реализации контейнеров, итераторов и алгоритмов: принятые в книге решения сравниваются с решениями STL.
Книга состоит из введения, 14 глав и приложения. Так как она задумана как учебное пособие по объектно-ориентированной части С++, в конце каждой главы приведены контрольные вопросы и небольшой набор практических упражнений по теме главы. Вопросы могут использоваться для подготовки к экзамену по С++.
В главе 1 объясняется, зачем необходимы классы, описываются синтаксис и семантика конструкции класса. В качестве примера приведена реализация класса денег. Затрагиваются проблемы выравнивания и размеров классов.
Глава 2 посвящена реализации конструкторов. Изучаются также вопросы использования констант и константных полей в классах.
В главе 3 излагаются проблемы перегрузки операций. Объясняется, зачем необходимы дружественные функции. Рассматриваются функции преобразования типов и роль конструкторов в преобразовании типов.
1 См., например, [29,30,31,32,33,35].
Глава 4 посвящена вопросам «взаимоотношений» полей-массивов и классов. Реализуется довольно развитый класс строк, аналогичных строкам в системе Turbo Pascal. Изучаются статические элементы классов (в том числе статические массивы).
В главе 5 рассматриваются простейшие вопросы управления динамической памятью. Реализуется динамический «умный» массив, на примере которого объясняются особенности конструктора копирования, операции присваивания и деструктора.
Глава 6 является введением в тему динамических контейнеров. Подробно рассматриваются операции последовательного доступа к элементам контейнера и реализация их посредством итераторов. Сравниваются списковые реализации дека и стека. Изучаются проблемы универсализации контейнеров.
Глава 7 содержит материал по исключениям. Довольно подробно описана «раскрутка» стека. Рассматривается иерархия стандартных исключений. Для ознакомления и сравнения рассматривается механизм структурных исключений, реализованный в Windows.
В главе 8 достаточно подробно описывается простое одиночное наследование — как открытое, так и закрытое. Детально объясняется принцип подстановки.
Виртуальные функции, в том числе и виртуальные деструкторы, изучаются в главе 9.
Глава 10 включает материал о множественном наследовании. Обсуждаются проблемы, возникающие при использовании этого механизма. Рассматривается также механизм RTTI и его применение для динамической идентификации типов во время выполнения программы. Описываются различные способы реализации мультиметодов.
В главе 11 рассматриваются шаблоны классов. Описывается шаблонная реализация некоторых контейнеров. Подробно раскрываются различные варианты использования параметров шаблона и механизм специализации шаблонов.
В главе 12 изучаются шаблоны функций. Разрабатывается обобщенный алгоритм; реализуются функторы и адаптеры функторов, аналогичные стандартным, реализованным в STL.
Глава 13 посвящена вопросам разделения программы на модули. Описывается принцип ODR. На примерах ранее реализованных классов выполняется разделение их на интерфейс и реализацию. Объясняется механизм функционирования стражей включения. Описываются пространства имен. Рассматривается взаимодействие различных элементов программы, объявленных в разных модулях.
Глава 14, посвященная вводу-выводу, — самая большая в книге. Достаточно подробно описываются стандартные средства форматирования, работа с файлами, строковые потоки. Обсуждаются проблемы перегрузки операций ввода-вывода для нового класса вместе с реализацией пользовательских манипуляторов. Рассматриваются широкие потоки.
Опубликовал Kest
August 13 2013 19:54:16 ·
0 Комментариев ·
3770 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.