Введение
Для кого написана эта книга
Соглашения

НЕДЕЛЯ 1

ОСНОВНЫЕ ВОПРОСЫ
Несколько слов для программистов на языке С
Что дальше

День 1. Первые шаги
Введение
Краткий экскурс в историю языка C++
Программы
Решение многих проблем
Процедурное, структурированное и
объектно-ориентированное
программирование
Язык C++ и объектно-ориентированное
программирование
Эволюция языка C++
Нужно ли сначала изучить язык С
C++ и Java
Стандарт ANSI
Подготовка к программированию
Среда разработки
Компиляция исходного кода программы
Создание исполняемого файла с помощью
компоновщика
Цикл разработки
Первая программа на языке C++ - HELLO.cpp
Осваиваем компилятор Visual C++ 6
Построение проекта приветствия
Ошибки компиляции
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 2. Составные части программы на языке
C++
Простая программа на языке C++
Кратко об объекте cout
Комментарии
Виды комментариев
Использование комментариев
Напоследок предупреждение: осторожнее с
комментариями!
Функции
Использование функций
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 3. Переменные и константы
Что такое переменная
Резервирование памяти
Размер целых
Знаковые и беззнаковые типы
Базовые типы переменных
Определение переменной
Чувствительность к регистру букв
Ключевые слова
Создание нескольких переменных одного типа
Присваивание значений переменным
Ключевое слово typedef
В каких случаях следует использовать типы
short и long
Переполнение беззнаковых целых
Переполнение знаковых целочисленных
значений
Символы
Символы и числа
Специальные символы
Константы
Литеральные константы
Символьные константы
Определение констант с помощью директивы
#define
Определение констант с помощью ключевого
слова const
Константы перечислений
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 4. Выражения и операторы
Выражения
Символы пробелов
Блоки и комплексные выражения
Операции
Операторы
Оператор присваивания
Математические операторы
Целочисленное деление и деление по
модулю
Совместное использование математических
операторов с операторами присваивания
Инкремент и декремент
Префикс и постфикс
Приоритеты операторов
Вложение круглых скобок
Что такое ИСТИННО
Операторы отношений
Оператор if
Использование отступов в программных
кодах
Ключевое слово else
Сложные конструкции с if
Использование фигурных скобок для вложенных
операторов if
Логические операторы
Логическое И
Логическое ИЛИ
Логическое НЕТ
Вычисление по сокращенной схеме
Приоритеты операторов отношений
Подробнее об истине и лжи
Условный оператор
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 5. Функции
Что такое функция
Возвращаемые значения, параметры и
аргументы
Объявление и определение функций
Объявление функции
Прототипы функций
Определение функции
Выполнение функций
Локальные переменные
Глобальные переменные
Глобальные переменные: будьте начеку
Подробнее о локальных переменных
Операторы, используемые в функциях
Подробнее об аргументах функций
Использование функций в качестве
параметров функций
Параметры - это локальные переменные
Подробнее о возвращаемых значениях
Значения параметров, используемые по
умолчанию
Перегрузка функций
Дополнительные сведения о функциях
Подставляемые inline-функции
Рекурсия
Работа функций - приподнимем завесу тайны
Уровни абстракции
Разбиение памяти
Стек и функции
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 6. Базовые классы
Создание новых типов
Зачем создавать новый тип
Классы и члены
Объявление класса
Несколько слов об используемых именах
Определение объекта
Классы в сравнении с объектами
Получение доступа к членам класса
Значения присваиваются объектам, а не
классам
Что объявишь, то и будешь иметь
Ограничение доступа к членам класса
Оставьте данные класса закрытыми
Ограничение доступа к данным - это не
способ зашиты данных,
а лишь средство облегчения
программирования
Определение методов класса
Конструкторы и деструкторы
Конструкторы и деструкторы, заданные по
умолчанию
Использование конструктора, заданного по
умолчанию
Объявление функций-членов со спецификатором
const
Чем отличается интерфейс от выполнения
класса
Где следует располагать в программе
объявления классов и определения методов
Выполнение с подстановкой
Классы, содержащие другие классы в качестве
данных-членов
Структуры
Почему два ключевых слова несут
одинаковую смысловую нагрузку
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 7. Циклы
Организация циклов
История оператора goto
Почему следует избегать оператора goto
Организация циклов с помощью оператора
while
Сложные конструкции с оператором while
Операторы break и continue
Использование конструкции while(true)
Организация циклов с помощью конструкции
do...while
Использование конструкции do...while
Оператор for
Сложные выражения с оператором for
Использование пустых циклов for
Вложенные циклы
Область видимости переменных-счетчиков
циклов for
Обобщение сведений о циклах
Оператор switch
Обработка команд меню с помощью
оператора switch
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

НЕДЕЛЯ 2

ОСНОВНЫЕ ВОПРОСЫ
Что дальше

День 8. Указатели
Что такое указатель
Использование указателя как средства
хранения адреса
Имена указателей
Оператор разыменования
Указатели, адреса и переменные
Обращение к данными через указатели
Использование адреса, хранящегося в
указателе
Для чего нужны указатели
Память стековая и динамически
распределяемая
Оператор new
Оператор delete
Что такое утечка памяти
Размещение объектов в области динамически
памяти
Удаление объектов
Доступ к членам класса
Динамическое размещение членов класса
Указатель this
Блуждающие, дикие или зависшие указатели
Использование ключевого слова const при
объявлении указателей
Использование ключевого слова const при
объявлении указателей и функций-членов
Указатель const this
Вычисления с указателями
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 9. Ссылки
Что такое ссылка
Использование оператора адреса (&) при
работе со ссылками
Ссылки нельзя переназначать
На что можно ссылаться
Нулевые указатели и нулевые ссылки
Передача аргументов функций как ссылок
Передача указателей в функцию swap()
Передача ссылок в функцию swap()
Представления о заголовках функций и
прототипах
Возвращение нескольких значений
Возвращение значений с помощью ссылок
Передача ссылок на переменные как средство
повышения эффективности
Передача константного указателя
Ссылки в качестве альтернативы
Когда лучше использовать ссылки, а когда -
указатели
Коктейль из ссылок и указателей
Не возвращайте ссылку на объект, который
находится вне области видимости!
Возвращение ссылки на объект в области
динамического обмена
А где же указатель?
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 10. Дополнительные возможности
использования функции
Перегруженные функции-члены
Использование значений, заданных по
умолчанию
Выбор между значениями по умолчанию и
перегруженными функциями
Конструктор, принятый по умолчанию
Перегрузка конструкторов
Инициализация объектов
Конструктор-копировщик
Перегрузка операторов
Запись функции инкремента
Перегрузка префиксных операторов
Типы возвратов перегруженных функций
операторов
Возвращение безымянных временных
объектов
Использование указателя this
Перегрузка постфиксных операторов
Различия между преинкрементом и
постинкрементом
Оператор суммирования
Перегрузка оператора суммирования
Основные принципы перегрузки операторов
Ограничения перегрузки операторов
Что можно перегружать
Оператор присваивания
Операторы преобразований
Операторы преобразования типов
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 11. Наследование
Что такое наследование
Иерархия и наследование
Царство животных
Синтаксис наследования классов
Закрытый или защищенный
Конструкторы и деструкторы
Передача аргументов в базовые
конструкторы
Замещение функций
Сокрытие метода базового класса
Вызов базового метода
Виртуальные методы
Как работают виртуальные функции
Нельзя брать там, находясь здесь
Дробление объекта
Виртуальные деструкторы
Виртуальный конструктор-копировшик
Цена виртуальности методов
Резюме
Вопросы и ответы
Коллоквиум
Тест
Упражнения

День 12. Массивы и связанные листы
Что такое массивы
Элементы -массива
Ввод данных за пределы массива
Ошибки подсчета столбов для забора
Инициализация массива
Объявление массивов
Массивы объектов
Многомерные массивы
Инициализация многомерного массива
Несколько слов о памяти
Массивы указателей
Объявление массивов в области динамического
обмена
Указатель на массив или массив указателей
Имена массивов и указателей
Удаление массива из области динамической
памяти
Массивы символов
Функции strcpy() и strncpy()
Классы строк
Связанные списки и другие структуры
Общие представления о связанных списках
Делегирование ответственности
Компоненты связанных списков
Что мы узнали в этой главе
Классы массивов
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 13. Полиморфизм
Проблемы с одиночным наследованием
Перенос метода вверх по иерархии классов
Приведение указателя к типу производного
класса
Добавление объекта в два списка
Множественное наследование
Из каких частей состоят объекты,
полученные в результате множественного
наследования
Конструкторы классов, полученных в
результате множественного наследования
Двусмысленность ситуации
Наследование от общего базового класса
Виртуальное наследование
Проблемы с множественным наследованием
Классы-мандаты
Абстрактные типы данных
Чистые виртуальные функции
Выполнение чистых виртуальных функций
Сложная иерархия абстракций
Когда следует использовать абстрактные
типы данных
Логика использования абстрактных классов
Пара слов о множественном наследовании,
абстрактных типах данных и языке Java
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 14. Специальные классы и функции
Статические переменные-члены
Статические функции-члены
Указатели на функции
Зачем нужны указатели на функции
Массивы указателей на функции
Передача указателей на функции в другие
функции
Использование typedef с указателями на
функции
Указатели на функции-члены
Массивы указателей на функции-члены
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

НЕДЕЛЯ 3

ОСН0ВНЫЕ ВОПРОСЫ
Что дальше

День 15. Дополнительные возможности
наследования
Вложение
Доступ к членам вложенного класса
Фильтрация доступа к вложенным классам
Цена вложений
Передача объекта как значения
Различные пути передачи функциональности
классу
Делегирование
Закрытое наследование
Классы друзья
Функции друзья
Функции друзья и перегрузка оператора
Перегрузка оператора вывода
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 16. Потоки
Знакомство с потоками
Инкапсуляция
Буферизация
Потоки и буферы
Стандартные объекты ввода-вывода
Переадресация
Вывод данных с помощью cin
Строки
Проблемы, возникающие при вводе строк
Оператор >> возвращает ссылку на объект
istream
Другие методы объекта cin
Ввод одного символа
Ввод строк со стандартного устройства
ввода
Вывод данных с помощью cout
Очистка буфера вывода
Функции-члены объекта cout
Манипуляторы, флаги и команды
форматирования
Использование функции cout.width()
Установка символов заполнения
Установка флагов
Сравнение потоков и функции printf()
Использование файлов для ввода и вывода
данных
Объекты ofstream
Состояния условий
Открытие файлов для ввода-вывода
Настройка открытия файла объектом
ofstream
Двоичные и текстовые файлы
Установка параметров ввода-вывода с помощью
командной строки
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 17. Пространства имен
Введение
Вызов по имени функций и классов
Создание пространства имени
Объявление и определение типов
Объявление функций за пределами
пространства имени
Добавление новых членов
Вложения пространств имен
Использование пространств имен
Ключевое слово using
Использование using как оператора
Использование using в объявлениях
Псевдонимы пространства имен
Неименованные пространства имен
Стандартное пространство имен std
Резюме
Вопросы и ответы
Контрольные вопросы
Упражнения

День 18. Анализ и проектирование
объектно-ориентированных программ
Является ли C++ объектно-ориентированным
языком программирования
Построение моделей
Проектирование программ: язык моделирования
Процесс проектирования программ
Идея
Анализ требований
Ситуации использования
Определение пользователей
Определение первой ситуации
использования
Создание модели домена
Разработка сценариев
Разработка путеводителей
Анализ совместимости приложения
Анализ существующих систем
Прочая документация
Визуализация
Артефакты
Проектирование
Что такое классы
Преобразования
Другие преобразования
Статическая модель
Карточки CRC
Отношения между классами
Динамическая модель
Диаграммы переходов состояний
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 19. Шаблоны
Что такое шаблоны
Параметризованные типы
Создание экземпляра шаблона
Объявление шаблона
Использование имени шаблона
Выполнение шаблона
Функции шаблона
Шаблоны и друзья
Дружественные классы и функции, не
являющиеся шаблонами
Дружественный класс или функция как
общий шаблон
Использование экземпляров шаблона
Специализированные функции
Статические члены и шаблоны
Стандартная библиотека шаблонов
Контейнеры
Последовательные контейнеры
Вектор
Список
Контейнер двухсторонней очереди
Стеки
Очередь
Ассоциативные контейнеры
Карта
Другие ассоциативные контейнеры
Классы алгоритмов
Операции, не изменяющие
последовательность
Алгоритмы изменения последовательности
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 20. Отслеживание исключительных ситуаций
и ошибок
Ошибки, погрешности, ляпсусы и "гнилой" код
Исключительные ситуации
Несколько слов о "гнилом" коде
Исключения
Как используются исключения
Использование блоков try и catch
Перехват исключений
Использование нескольких операторов
catch
Наследование исключений
Данные в классах исключений и присвоение
имен объектам исключений
Исключения и шаблоны
Исключения без ошибок
Ошибки и отладка программы
Точки останова
Анализ значений переменных
Исследование памяти
Код ассемблера
Резюме
Вопросы и ответы
Коллоквиум
Контрольные вопросы
Упражнения

День 21. Что дальше
Препроцессор и компилятор
Просмотр промежуточного файла
Использование директивы #define
Использование директивы #define для
создания констант
Использование директивы #define для
тестирования
Команда препроцессора #else
Включение файлов и предупреждение ошибок
включения
Макросы
Зачем нужны все эти круглые скобки
Макросы в сравнении с функциями шаблонов
Подставляемые функции
Операции со строками
Оператор взятия в кавычки
Конкатенация
Встроенные макросы
Макрос asscrt()
Отладка программы с помощью макроса
assert()
Макрос assert() вместо исключений
Побочные эффекты
Инварианты класса
Печать промежуточных значений
Уровни отладки
Операции с битами данных
Оператор И (AND)
Оператор ИЛИ (OR)
Оператор исключающего ИЛИ (OR)
Оператор дополнения до единицы
Установка битов
Сброс битов
Инверсия битов
Битовые поля
Стиль программирования
Отступы
Фигурные скобки
Длинные строки
Конструкции с оператором switch
Текст программы
Имена идентификаторов
Правописание и использование прописных
букв в именах
Комментарии
Организация доступа к данным и методам
Определения классов
Включение файлов
Макрос assert()
Ключевое слово const
Сделаем еще один шаг вперед
Где получить справочную информацию и
советы
Журналы
Выскажите свое мнение о книге
Резюме
Вопросы и ответы
Контрольные вопросы
Упражнения

Приложение А. Приоритеты операторов

Приложение Б. Ключевые слова C++

Приложение В. Двоичные и шестнадцатеричные
числа

Приложение Г. Ответы

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