Содержание
Предисловие
Глава 1. Зачем нужно объектно-ориентированное
программирование на C++?
1.1. Объектно-ориентированное
программирование
1.2. Пример программы на C++
1.3. Инкапсуляция и расширяемость типов
1.4. Конструкторы и деструкторы
1.5. Перегрузка
1.6. Шаблоны и обобщенное программирование
1.7. Стандартная библиотека шаблонов (STL)
1.8. Наследование
1.9. Полиморфизм
1.10. Исключения в C++
1.11. Преимущества
объектно-ориентированного программирования

Глава 2. Собственные типы данных и инструкции
2.1. Элементы программы
2.1.1. Комментарии
2.1.2. Ключевые слова
2.1.3. Идентификаторы
2.1.4. Литералы
2.1.5. Операторы и знаки пунктуации
2.2. Ввод-вывод
2.3. Структура программы
2.4. Простые типы
2.4.1. Инициализация
2.5. Традиционные преобразования
2.6. Перечислимые типы
2.7. Выражения
2.8. Инструкции
2.8.1. Присваивание и выражения
2.8.2. Составная инструкция
2.8.3. Инструкции if и if-else
2.8.4. Инструкция while
2.8.5. Инструкция for
2.8.6. Инструкция do
2.8.7. Инструкции break и continue
2.8.8. Инструкция switch
2.8.9. Инструкция goto
2.9. Практические замечания
Резюме
Упражнения

Глава 3. Функции и указатели
3.1. Функции
3.1.1. Вызов функции
3.2. Определение функции
3.3. Инструкция return
3.4. Прототипы функций
3.5. Аргументы по умолчанию
3.6. Перегрузка функций
3.7. Встраивание
3.8. Область видимости и класс памяти
3.8.1. Класс памяти auto
3.8.2. Класс памяти register
3.8.3. Класс памяти extern
3.8.4. Класс памяти static
3.8.5. Таинства компоновки
3.9. Пространства имен
3.10. Типы указателей
3.10.1. Определение адреса и
разыменование
3.10.2. Вызов по ссылке на основе
указателей
3.11. Применение void
3.12. Массивы и указатели
3.12.1. Индексирование
3.12.2. Инициализация
3.13. Связь между массивами и указателями
3.14. Передача массивов функциям
3.15. Объявления ссылок и вызов по ссылке
3.16. Проверка утверждений и корректность
программы
3.17. Строки: соглашение о char*
3.18. Многомерные массивы
3.19. Операторы свободной памяти new и
delete
3.20. Практические замечания
3.20.1. void* и reinterpret_cast
3.20.2. Замена объявлений static extern
Резюме
Упражнения

Глава 4. Реализация АТД в базовом языке
4.1. Агрегатный тип struct
4.2. Оператор указателя структуры
4.3. Пример: стек
4.4. Объединения
4.5. Комплексные числа
4.6. Пример: флеш
4.7. Битовые поля
4.8. Пример: двумерные динамические массивы
4.9. Практические замечания
Резюме
Упражнения

Глава 5. Сокрытие данных и функции-члены
класса
5.1. Функции-члены класса
5.2. Доступ: закрытый и открытый
5.3. Классы
5.4. Область видимости класса
5.4.1. Оператор разрешения области
видимости
5.4.2. Вложенные классы
5.5. Пример: пересмотрим флеш
5.6. Статические члены данных
5.7. Указатель this
5.8. Функции-члены типа static и const
5.8.1. Изменчивость (mutable)
5.9. Контейнеры и доступ к их содержимому
5.10. Практические замечания
Резюме
Упражнения

Глава 6. Создание и уничтожение объектов
6.1. Классы с конструкторами
6.1.1. Конструктор по умолчанию
6.1.2. Инициализатор конструктора
6.1.3. Конструкторы как преобразования
6.2. Создание динамического стека
6.3. Классы с деструкторами
6.4. Пример: динамически размещаемые строки
6.5. Класс vect
6.6. Члены данных, являющиеся классами
6.7. Пример: односвязный список
6.8. Двумерные массивы
6.9. Многочлен как связный список
6.10. Строки, использующие семантику ссылок
6.11. В отсутствии конструктора, копирующий
конструктор и другие тайны
6.11.1. Деструкторы: некоторые детали
6.12. Практические замечания
Резюме
Упражнения

Глава 7. Ad hoc полиморфизм
7.1. Преобразования АТД
7.2. Перегрузка и выбор функций
7.3. Дружественные функции
7.4. Перегрузка операторов
7.5. Перегрузка унарных операторов
7.6. Перегрузка бинарных операторов
7.7. Перегрузка операторов присваивания и
индексирования
7.8. Многочлены: что можно ждать от типа и
языка
7.9. Перегруженные операторы ввода-вывода "
и "
7.10. Перегрузка оператора () для
индексирования
7.11. Операторы указателей
7.11.1. Указатель на член класса
7.12. Перегрузка new и delete
7.13. Практические замечания
7.13.1. Соответствие сигнатуре
Резюме
Упражнения

Глава 8. Перебор: итераторы и контейнеры
8.1. Перебор
8.2. Итераторы
8.3. Пример: quicksort()
8.4. Дружественные классы и итераторы
8.5. Обобщенное программирование с
использованием void*
8.6. Список и итератор списка
8.7. Практические замечания
Резюме
Упражнения

Глава 9. Шаблоны, обобщенное программирование
и STL
9.1. Шаблонный класс stack
9.2. Шаблоны функций
9.2.1. Соответствие сигнатуре и
перегрузка
9.3. Шаблоны классов
9.3.1. Друзья
9.3.2. Статические члены
9.3.3. Аргументы шаблона класса
9.4. Параметризация класса vector
9.5. Параметризация quicksort()
9.6. Параметризованное дерево двоичного
поиска
9.7. STL
9.8. Контейнеры
9.8.1. Последовательные контейнеры
9.8.2. Ассоциативные контейнеры
9.8.3. Адаптеры контейнеров
9.9. Итераторы
9.9.1. Итераторы istream_iterator и
ostream_iterator
9.9.2. Адаптеры итераторов
9.10. Алгоритмы
9.10.1. Алгоритмы сортировки
9.10.2. Не изменяющие последовательность
алгоритмы
9.10.3. Изменяющие последовательность
алгоритмы
9.10.4. Численные алгоритмы
9.11. Функции
9.12. Адаптеры функций
9.13. Практические замечания
Резюме
Упражнения

Глава 10. Наследование
10.1. Производный класс
10.2. Преобразования типов и видимость
10.3. Повторное использование кода: класс
двоичного дерева
10.4. Виртуальные функции
10.5. Абстрактные базовые классы
10.6. Шаблоны и наследование
10.7. Множественное наследование
10.8. Наследование и проектирование
10.8.1. Форма подтипов
10.9. Идентификация типа на этапе
выполнения
10.10. Практические замечания
Резюме
Упражнения

Глава 11. Исключения
11.1. Использование assert.h
11.2. Использование signal.h
11.3. Исключения C++
11.4. Запуск исключений
11.4.1. Перезапуск исключений
11.4.2. Выражения исключений
11.5. Пробные блоки try
11.6. Обработчики
11.7. Спецификация исключения
11.8. terminate() и unexpected()
11.9. Пример кода с исключениями
11.10. Стандартные исключения и их
использование
11.11. Практические замечания
Резюме
Упражнения

Глава 12. ООП на C++
12.1. Требования к языку ООП
12.2. АТД в не-ООП языках
12.3. Клиенты и производители
12.4. Повторное использование кода и
наследование
12.5. Полиморфизм
12.6. Сложность языка
12.7. Успех ООП на C++
12.8. Платонизм: проектирование "tabula
rasa"
12.9. Принципы проектирования
12.10. Схемы, диаграммы и инструменты
12.11. Штампы проектирования
12.12. C++: критика
Резюме
Упражнения

Приложение А. Коды символов ASCII

Приложение В. Приоритет и порядок выполнения
операторов

Приложение С. Руководство по языку
C.I. Структура программы
С.2. Лексические элементы
С.2.1. Комментарии
С.2.2. Идентификаторы
С.2.3. Ключевые слова
С.З. Константы
С.4. Объявления и правила области видимости
С.5. Пространства имен
С.6. Правила компоновки
С.7.Типы
С.8. Приведения и правила преобразований
С.9. Выражения и операторы
С.9.1. Выражения sizeof
С.9.2. Выражения автоинкремента и
автодекремента
С.9.3. Арифметические выражения
С.9.4. Выражения отношения, равенства и
логические выражения
С.9.5. Выражения присваивания
С.9.6. Выражения с запятой
С.9.7. Условные выражения
С.9.8. Выражения с битовыми операторами
С.9.9. Выражения с определением адреса и
обращением по адресу
С.9.10. Выражения с new и delete
С.9.11. Другие выражения
C.10. Инструкции
С.10.1. Инструкции-выражения
С.10.2. Составная инструкция
С.10.3. Инструкции if и if-else
С.10.4. Инструкция while
C.10.5. Инструкция for
C.10.6. Инструкция do
C.10.7. Инструкции break и continue
С.10.8. Инструкция switch
С.10.9. Инструкция goto
С.10.10. Инструкция return
С.10.11. Инструкция-объявление
С.11. Функции
C.11.1. Прототипы
С.11.2. Вызов по ссылке
С.11.3. Встроенные функции
C.11.4. Аргументы по умолчанию
C.11.5. Перегрузка
C.11.6. Типобезопасная компоновка для
функций
С.12. Классы
C.12.1. Конструкторы и деструкторы
С.12.2. Функции-члены
С.12.3. Дружественные функции
C.12.4. Указатель this
С.12.5. Перегрузка операторов
С.12.6. Функции-члены типа static и
const
С.12.7. Изменчивость (mutable)
С.12.8. Проектирование классов
С.13. Наследование
С.13.1. Множественное наследование
С.13.2. Вызов конструктора
С.13.3. Абстрактные базовые классы
С.13.4. Указатель на член класса
С.13.5. Идентификация типа на этапе
выполнения
С.13.6. Виртуальные функции
С.14. Шаблоны
С.14.1. Параметры шаблона
С.14.2. Шаблоны функций
С.14.3. Друзья
С.14.4. Статические члены
С.14.5. Специализация
С.15. Исключения
С.15.1. Запуск исключений
С.15.2. Пробные блоки try
C.15.3. Обработчики
С.15.4. Спецификация исключения
C.15.5. terminate() и unexpected()
С.15.6. Стандартные библиотечные
исключения
С.16. Предосторожности, связанные с
совместимостью
С.16.1. Объявления вложенных классов
С.16.2. Совместимость типов
С.16.3. Разное
С.17. Новые возможности C++

Приложение D. Ввод-вывод
D.I. Класс вывода ostream
D.2. Форматированный вывод и iomanip.h
D.3. Пользовательские типы: вывод
D.4. Класс ввода istream
D.5. Файлы
D.6. Использование строк как потоков
D.7. Функции и макро в ctype.h
D.8. Использование состояния потока
D.9. Совместное использование библиотек
ввода-вывода

Приложение Е. STL и строковые библиотеки
E.I. Контейнеры
E.I.I. Последовательные контейнеры
Е.1.2. Ассоциативные контейнеры
Е.1.3. Адаптеры контейнеров
Е.2. Итераторы
Е.2.1. Категории итераторов
Е.2.2. Итератор istream_iterator
Е.2.3. Итератор ostream_iterator
Е.2.4. Адаптеры итераторов
Е.З. Алгоритмы
Е.3.1. Алгоритмы сортировки
Е.3.2. Не изменяющие последовательность
алгоритмы
Е.3.3. Изменяющие последовательность
алгоритмы
Е.3.4. Численные алгоритмы
Е.4. Функции
Е.4.1. Адаптеры функций
Е.5. Распределители памяти
Е.6. Строковая библиотека
Е.6.1. Конструкторы
Е.6.2. Функции-члены
Е.6.3. Глобальные операторы

Литература
Предметный указатель