ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ 3

ГЛАВА 1. ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ ЯЗЫКА С++ 5
1.1. Алфавит языка 5
1.2. Структура программы на языке С++ 6

ГЛАВА 2. СТАНДАРТНЫЕ ТИПЫ ДАННЫХ 10
2.1. Переменные целого типа 10
2.2. Переменные вещественного типа 11
2.3. Переменные логического типа 11
2.4. Константы 11
2.5. Выражения 12
2.6. Операции 13
2.7. Преобразование типов 17
2.8. Манипулятор setw 18

ГЛАВА 3. ЛИНЕЙНЫЕ И РАЗВЕТВЛЕННЫЕ АЛГОРИТМЫ 20
3.1. Линейные алгоритмы 20
3.2. Разветвленные алгоритмы 24
3.2.1. Условный оператор if 25
3.2.2. Оператор if – else 26
3.2.3. Вложенные ветвления 27
3.2.4. Условная операция 28
3.2.5. Оператор множественного выбора 29

ГЛАВА 4. ОРГАНИЗАЦИЯ ЦИКЛОВ В ЯЗЫКЕ С++ 33
4.1. Оператор цикла с предварительным условием 33
4.2. Оператор цикла с последующим условием 35
4.3. Оператор цикла с параметром 36
4.4. Оператор break 39
4.5. Оператор continue 39
4.6. Оператор goto 41
4.7. Останов программы с помощью оператора exit 41
4.8. Область видимости переменных внутри блока 41

ГЛАВА 5. ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ ЦИКЛА ДЛЯ РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ 44
5.1. Вычисление суммы бесконечного ряда с заданной точностью 44
5.2. Понятие о рекуррентных формулах 45
5.3. Использование операторов цикла для решения задач
численными методами 46
5.3.1. Вычисление с заданной точностью  корня
уравнения F(x) = 0 методом простых итераций 46
5.3.2. Решение уравнения f(x) = 0 с заданной точностью 
методом деления отрезка пополам 47
5.4. Использование операторов цикла для вычисления
определенных интегралов 49
5.4.1. Вычисление значения f(x)dx с заданной точностью
методом прямоугольников 49
5.4.2. Вычисление по формуле Симпсона 50

ГЛАВА 6. МАССИВЫ И СТРОКИ 54
6.1. Одномерные массивы 54
6.2. Инициализация массива 56
6.3. Методы сортировки массивов 57
6.3.1. Сортировка простым выбором 57
6.3.2. Метод пузырьковой сортировки 58
6.3.3. Метод пузырьковой сортировки с оптимизацией 59
6.4. Двумерные массивы 61
6.5. Обработка матриц 63
6.5.1. Работа с матрицей в целом 63
6.5.2. Работа со строками/столбцами матрицы 63
6.5.3. Диагональные элементы матриц 64
6.6. Строка как массив символов 66
6.6.1. Ввод и вывод строк 66
6.6.2. Функции для работы со строками 70

ГЛАВА 7. ТИПЫ ДАННЫХ, СОЗДАВАЕМЫЕ ПОЛЬЗОВАТЕЛЕМ (СТРУКТУРЫ, ОБЪЕДИНЕНИЯ, ПЕРЕЧИСЛЕНИЯ) 73
7.1. Структуры 73
7.1.1. Присваивание значений структурным переменным 74
7.1.2. Псевдонимы структур 75
7.1.3. Операции, допустимые над переменными
структурного типа 76
7.1.4. Вложенные структуры 76
7.1.5. Массивы структур 77
7.1.6. Структуры с битовыми полями 79
7.2. Объединения 79
7.3. Перечисления 81

ГЛАВА 8. МАГНИТНЫЕ НОСИТЕЛИ ДАННЫХ. ПОНЯТИЕ О ФАЙЛОВЫХ СИСТЕМАХ 85
8.1. Структура диска 85
8.2. Файловая система DOS. Таблица размещения файлов 86
8.3. Файловая система NTFS 89
8.3.1. Структура раздела 89
8.3.2. Структура MFT 90
8.3.3. Файлы и потоки 91
8.3.4. Каталоги 91

ГЛАВА 9. ОРГАНИЗАЦИЯ ВВОДА И ВЫВОДА. ФАЙЛОВАЯ СИСТЕМА 93
9.1. Стандартные файлы ввода и вывода 93
9.2. Текстовые файлы 94
9.3. Основные методы обработки текстовых файлов 95
9.4. Двоичные файлы 98
9.5. Последовательный доступ к элементам
двоичных файлов 99
9.6. Организация произвольного доступа
к элементам двоичных файлов 102
9.7. Аргументы командной строки 104

ГЛАВА 10. ОБОБЩЕННАЯ АРХИТЕКТУРА ПРОЦЕССОРА IBM PC 108
10.1. Понятие об адресном пространстве 108
10.2. Система адресации в MS-DOS 109
10.3. Понятие о моделях памяти 110

ГЛАВА 11. ФУНКЦИИ В ЯЗЫКЕ С++ 113
11.1. Объявление и определение функций 113
11.2. Понятие о параметрах функций 115
11.3. Локальные и глобальные переменные 117
11.4. Отсутствие прототипов функций 118
11.5. Строки, массивы и структуры в качестве
параметров функций 119
11.6. Рекурсия 123
11.7. Встраиваемые функции 125
11.8. Перегрузка функций 126
11.9. Использование аргументов по умолчанию 127

ГЛАВА 12. ПОНЯТИЕ ОБ УКАЗАТЕЛЯХ И ССЫЛКАХ. ЕЗЕРВИРОВАНИЕ ПАМЯТИ 131
12.1. Объявление указателей 131
12.2. Разыменование указателей 132
12.3. Нулевые указатели и указатели на тип void 134
12.4. Ссылки 136
12.5. Резервирование памяти в куче 136

ГЛАВА 13. УКАЗАТЕЛИ И СТРУКТУРЫ ДАННЫХ 141
13.1. Указатели и массивы 141
13.2. Указатели и многомерные массивы 145
13.3. Cтроковые указатели 147
13.4. Указатели и структуры 148
13.5. Указатели и модификатор const 150

ГЛАВА 14. УКАЗАТЕЛИ И ФУНКЦИИ 154
14.1. Способы передачи параметров 154
14.2. Передача массивов посредством указателей 155
14.3. Строки как аргументы функций 156
14.4. Передача структур по указателю и по ссылке 157
14.5. Ссылка в качестве возвращаемого
значения функции 158
14.6. Функции, возвращающие указатели 159
14.7. Константные ссылки и константные указатели
в качестве параметров функций 160
14.8. Указатели на функции 162

ГЛАВА 15. ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ 165
15.1. Понятие о самоссылочных структурах 165
15.2. Формирование очереди 165
15.3. Формирование стека 168
15.4. Добавление и удаление элементов
в односвязных списках 170
15.5. Двусвязные списки 173
15.6. Бинарные деревья 176

ГЛАВА 16. ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ 180

ГЛАВА 17. СИСТЕМА ВВОДА-ВЫВОДА В С++ 186
17.1. Основные понятия 186
17.2. Форматируемый ввод-вывод 186
17.3. Функции установки ширины поля, точности
и символа заполнения 190
17.4. Манипуляторы ввода-вывода 190

ГЛАВА 18. КОНСТРУКТОРЫ И ДЕСТРУКТОРЫ 192
18.1. Понятие о конструкторах и деструкторах 192
18.2. Конструкторы с параметрами 193
18.3. Конструкторы по умолчанию 194
18.4. Указатели на объекты 195
18.5. Перегрузка конструкторов 196
18.6. Присваивание объектов 198
18.7. Конструктор копирования 199

ГЛАВА 19. ФУНКЦИИ И ОБЪЕКТЫ 203
19.1. Указатели на объекты 203
19.2. Передача объектов в функции 204
19.2.1. Передача объектов по значению 204
19.2.2. Передача объектов по указателю 205
19.2.3. Передача объектов по ссылке 206
19.3. Объекты в качестве возвращаемых значений 207
19.4. Дружественные функции 208

ГЛАВА 20. ПЕРЕГРУЗКА ОПЕРАТОРОВ 212
20.1. Перегрузка унарных операторов 212
20.2. Перегрузка бинарных операторов 214
20.3. Перегрузка операторов отношения
и логических операторов 217
20.4. Перегрузка оператора индексирования 218
20.5. Перегрузка оператора присваивания 219
20.6. Перегрузка операторов управления памятью 220
20.6.1. Перегрузка оператора new 220
20.6.2. Перегрузка оператора delete 221
20.7. Использование дружественных оператор-функций 223
20.8. Перегрузка операторов вставки и извлечения 225
20.9. Перегрузка оператора вызова функции 227

ГЛАВА 21. НАСЛЕДОВАНИЕ 229
21.1. Введение в наследование 229
21.2. Простое наследование 230
21.3. Режимы доступа к элементам базового класса 230
21.4. Поведение конструкторов и деструкторов при наследовании 234
21.5. Множественное наследование 236
21.5.1. Создание иерархии классов 236
21.5.2. Прямое наследование нескольких
базовых классов 237

ГЛАВА 22. ВИРТУАЛЬНЫЕ ФУНКЦИИ 239
22.1. Понятие о виртуальных функциях 239
22.2. Указатели на базовый и производные классы 239
22.3. Виртуальные функции и наследование 241
22.4. Абстрактные классы и чисто виртуальные функции 242
22.5. Виртуальные деструкторы 244
22.6. Виртуальные базовые классы 245

ГЛАВА 23. ОБЪЕКТЫ И ФАЙЛОВЫЕ ПОТОКИ. ТЕКСТОВЫЕ ФАЙЛЫ 248
23.1. Потоковый ввод-вывод дисковых файлов 248
23.2. Текстовые файлы 249
23.2.1. Создание и запись 249
23.2.2. Посимвольное чтение файла 250
23.2.3. Посимвольная запись файла 250
23.2.4. Построчное чтение файла 251
23.2.5. Построчная запись файла 251
23.3. Признак конца файла 252

ГЛАВА 24. ОБЪЕКТЫ И ДВОИЧНЫЕ ФАЙЛЫ 255
24.1. Сохранение данных в двоичных файлах 255
24.1.1. Сохранение в двоичных файлах
данных стандартных типов 255
24.1.2. Сохранение в двоичных файлах данных,
имеющих тип, создаваемый пользователем 257
24.2. Произвольный доступ к элементам двоичных
файлов 257
24.2.1. Файловый указатель 257
24.2.2. Организация доступа к элементам
двоичных файлов 258

ГЛАВА 25. ШАБЛОНЫ. РОДОВЫЕ ФУНКЦИИ. РОДОВЫЕ КЛАССЫ 263
25.1. Понятие шаблона и родовой функции 263
25.2. Определение более чем одного родового типа данных 265
25.3. Родовые классы (шаблоны классов) 267

ГЛАВА 26. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ 271

ГЛАВА 27. ДИНАМИЧЕСКАЯ ИДЕНТИФИКАЦИЯ ТИПА 275
27.1. Оператор dynamic_cast 275
27.2. Оператор typeid 278
27.3. Структура класса type_info 281
27.4. Операторы приведения типа 281

ГЛАВА 28. СТАНДАРТНАЯ БИБЛИОТЕКА ШАБЛОНОВ. КОНТЕЙНЕРЫ, ИТЕРАТОРЫ, АЛГОРИТМЫ 284
28.1. Основные определения 284
28.2. Контейнеры 285
28.2.1. Векторы 287
28.2.2. Списки 289
28.3. Итераторы 290
28.4. Алгоритмы 290

ГЛАВА 29. СТРОКОВЫЙ КЛАСС 294
29.1. Ввод и вывод строк 294
29.2. Поиск в строке 295
29.3. Модификация строки 296
29.4. Сравнение строк 297
29.5. Получение информации об объекте класса string 298

ПРИЛОЖЕНИЕ А. СВЕДЕНИЯ О СИСТЕМАХ СЧИСЛЕНИЯ 300
А-1. Десятично-двоичные и двоично-десятичные преобразования 300
А-2. Восьмеричная и шестнадцатеричная
системы счисления 302
А-3. Таблицы истинности логических схем 304
А-4. Примеры использования двоичной арифметики 304

ПРИЛОЖЕНИЕ Б. СХЕМЫ АЛГОРИТМОВ 306

СПИСОК ЛИТЕРАТУРЫ 312