Вы находитесь на странице: 1из 645

С.

Прата
ЯЗЫК ПРОГРАММИРОВАНИЯ C++. ЛЕКЦИИ И УПРАЖНЕНИЯ
Изучение языка программирования C++ является приключением, ведущим к
открытиям. Это связано с тем, что C++ непрерывно развивается. В этой книге
рассказывается о стандартном языке C++ без привязки к какому-либо одному виду
компьютера, операционной системы или компилятора. Здесь вы найдете
подробнейшее описание синтаксиса языка, сопровождаемое многочисленными
практическими примерами. Цель книги - научить читателя создавать эффективные
программы и получать от этого удовольствие.
Издание рассчитано на пользователей с любым уровнем подготовки. Для
начинающих эта книга послужит превосходным учебником, а опытные
программисты смогут воспользоваться ею в качестве справочника, облегчающего
их ежедневный труд.
Учитывая уровень рассмотрения теоретических вопросов и наличие тщательно
подобранных упражнений, книгу можно рекомендовать как методическое пособие
преподавателям высших и средних учебных заведений, а также в качестве
учебника для студентов.

Краткое оглавление
Глава 1. Готовимся изучать язык C++ 21
Глава 2. Приступаем к изучению языка C++ 32
Глава 3. Представление данных 52
Глава 4. Производные типы данных 79
Глава 5. Циклы и выражения сравнения 115
Глава 6. Операторы ветвления и логические операции 145
Глава 7. Функции языка C++ 164
Глава 8. Работа с функциями 196
Глава 9. Объекты и классы 245
Глава 10. Работа с классами 274
Глава 11. Классы и динамическое распределение памяти 306
Глава 12. Наследование классов 345
Глава 13. Повторное использование программного кода в C++ 381
Глава 14. Дружественные конструкции, исключения и прочее 424
Глава 15. Класс string и стандартная библиотека шаблонов 465
Глава 16. Ввод/вывод данных и работа с файлами 516
Приложение А. Системы счисления 568
Приложение В. Ключевые слова языка C++ 570
Приложение С. Таблица кодов ASCII 571
Приложение D. Приоритет операций 575
Приложение Е. Другие операции 578
Приложение F. Класс шаблона STRING 583
Приложение G. Методы и функции библиотеки STL 594
Приложение Н. Рекомендуемая литература 615
Приложение I. Преобразование программного кода
в соответствии со стандартом ANSI/ISO C++ 617
Приложение J. Ответы на вопросы для повторения 622
Предметный указатель 634

Оглавление
Глава 1. Готовимся изучать язык C++ 21
Изучение языка C++ 21
Немного истории 22
Язык С 22
Философия программирования, заложенная в языке С 23
Объектно-ориентированное программирование 23
Обобщенное программирование 24
Язык C++ 24
Переносимость и стандарты 25
Методика создания программ 26
Создание исходного кода 27
Компиляция и компоновка 28
Компиляция и компоновка в операционной системе UNIX 28
Реализации Turbo C++ 2.0 и Borland C++ 3.1 (DOS) 29
Компиляторы для операционной системы Windows 29
Компиляторы для компьютеров Macintosh 30
Соглашения, используемые в этой книге 31
Наша система 31
Глава 2. Приступаем к изучению языка C++ 32
Начальные сведения о языке C++ 32
Функция main() 33
Заголовок функции в роли интерфейса 34
Когда функция main() не соответствует своему названию? 35
Комментарии в языке C++ 35
Препроцессор C++ и файл iostream 36
Имена заголовочных файлов 36
Области имен 36
Вывод данных в языке C++ с использованием объекта cout 37
Символ новой строки (\n) 38
Форматирование исходного кода C++ 39
Формат исходного кода программ C++ 40
Краткие сведения об операторах языка C++ 40
Операторы объявления и переменные 40
Оператор присваивания 41
Важный момент, связанный с объектом cout 41
Еще несколько операторов языка C++ 42
Применение объекта cin 42
И снова объект cout 43
Несколько слов о классах 43
Функции 44
Применение функций с возвращаемым значением 44
Разновидности функций 46
Функции, определяемые пользователем 47
Формат определения функции 47
Заголовки функций 48
Определяемая пользователем функция с возвращаемым значением 49
Итак, операторы 50
Резюме 50
Вопросы для повторения 51
Упражнения по программированию 51
Глава 3. Представление данных 52
Простые переменные 52
Имена переменных 53
Целочисленные типы данных 54
Типы даных short, int и long 54
Примечания к программе 56
Типы данных без знака 57
Какой тип выбрать? 58
Целочисленные константы 59
Определение типа константы в C++ 60
Тип данных char: символы и малые целые числа 60
Примечания к программе 61
Функция-элемент: cout.put() 62
Константы типа char 62
Типы данных signed char и unsigned char 64
Тип данных wchar_t 64
Новый тип данных bool 65
Квалификатор const 65
Числа с плавающей точкой 66
Запись чисел с плавающей точкой 66
Типы данных с плавающей точкой 67
Примечания к программе 69
Константы с плавающей точкой 69
Преимущества и недостатки типов данных с плавающей точкой 69
Арифметические операции языка C++ 70
Приоритет операций и ассоциативность 71
Разновидности операции деления 71
Операция деления по модулю 72
Преобразования типов данных 73
Преобразование при присваивании 73
Преобразования данных в выражениях 74
Преобразования данных при передаче аргументов 75
Приведение типов 75
Резюме 77
Вопросы для повторения 77
Упражнения по программированию 78
Глава 4. Производные типы данных 79
Краткий обзор массивов 79
Примечания к программе 81
Еще об инициализации массива 81
Строки 82
Конкатенация строк 83
Использование строк в массиве 83
Примечания к программе 84
Возможные нюансы при строковом вводе 84
Строчно-ориентированный ввод: getline() и get() 85
Пустые строки и другие проблемы 87
Смешанный строчно-числовой ввод 87
Краткий обзор структур 88
Примечания к программе 90
Другие свойства структуры 90
Массивы структур 91
Разрядные поля 92
Объединения 92
Перечисления 93
Установка значений перечислителя 94
Диапазоны значений для перечислений 94
Указатели и свободная память 95
Объявление и инициализация указателей 97
Указатели и числа 98
Распределение памяти с помощью оператора new 99
Примечания к программе 100
Освобождение памяти с помощью
оператора delete 100
Использование оператора new для создания динамических массивов 101
Создание динамического массива с помощью оператора new 101
Использование динамического массива 102
Указатели, массивы и арифметика указателей 103
Примечания к программе 104
Основные сведения об указателях 105
Указатели и строки 106
Примечания к программе 106
Использование оператора new для создания динамических структур 109
Пример использования операторов new и delete 110
Примечания к программе 111
Автоматическая, статическая и свободная память 111
Автоматические переменные 112
Статическая память 112
Свободная память 112
Резюме 112
Вопросы для повторения 113
Упражнения по программированию 114
Глава 5. Циклы и выражения сравнения 115
Обзор возможностей цикла for 115
Составные элементы цикла for 116
Выражения и операторы 117
Операторы и выражения 119
Незначительное нарушение правил 119
Снова о цикле for 120
Примечания к программе 120
Изменение шага цикла 121
Доступ к символам строки с помощью цикла for 121
Операторы инкремента (++) и декремента (--) 122
Комбинированные операторы присваивания 123
Составные операторы или блоки 123
Оператор "запятая" (или дополнительные синтаксические приемы) 124
Примечания к программе 125
Особенности применения оператора "запятая" 126
Выражения сравнения 126
Типичная ошибка программирования 126
Сравнение строк 128
Примечания к программе 129
Цикл while 129
Примечания к программе 130
Сравнение циклов for и while 131
Небольшая пауза 132
Цикл do while 133
Циклы и ввод текста 134
Применение простого оператора cin для ввода данных 134
Примечания к программе 135
На помощь приходит функция cin.get(char) 135
Выбор функции cin.get() 136
Условие конца файла 136
Конец файла означает конец ввода 137
Распространенные идиомы 138
Еще одна разновидность функции cin.get() 138
Вложенные циклы и двумерные массивы 140
Инициализация двумерного массива 141
Резюме 142
Вопросы для повторения 143
Упражнения по программированию 143
Глава 6. Операторы ветвления и логические операции 145
Оператор if 145
Оператор if else 146
Форматирование операторов if else 147
Конструкция if else if else 147
Логические выражения 148
Операция логического ИЛИ: || 148
Операция логического И: && 149
Примечания к программе 150
Определение диапазонов с помощью операции && 150
Примечания к программе 151
Операция логического НЕ: ! 151
Примечания к программе 152
Немного о логических операциях 152
Библиотека символьных функций cctype 153
Оператор ?: 154
Оператор switch 155
Использование перечислителей в качестве меток 157
Операторы switch и if else 157
Операторы break и continue 158
Примечания к программе 158
Циклы считывания чисел 159
Примечания к программе 161
Резюме 161
Вопросы для повторения 161
Упражнения по программированию 162
Глава 7. Функции языка C++ 164
Обзор функций 164
Определение функции 165
Прототипирование и вызов функций 166
Почему именно прототипы? 167
Синтаксис прототипа 167
Польза прототипов 168
Аргументы функции и передача по значению 169
Функции с несколькими аргументами 169
Примечания к программе 171
Еще одна функция с двумя аргументами 171
Примечания к программе 172
Функции и массивы 172
Массивы и указатели (продолжение) 173
Трудности, возникающие при использовании массивов в качестве 174
аргументов
Примечания к программе 175
Другие виды функций, выполняющих обработку массивов 176
Заполнение массива 176
Отображение массива и его защита с помощью спецификатора 177
const
Модификация элементов массива 177
Объединение частей в единое целое 178
Примечания к программе 179
Указатели и спецификатор const 179
Функции и строки в стиле С 180
Примечания к программе 181
Функции, возвращающие строки 182
Примечания к программе 182
Функции и структуры 183
Передача и возврат структур 183
Еще один пример 184
Примечания к программе 186
Передача адресов структур 187
Рекурсия 188
Примечания к программе 189
Указатели на функции 189
Назначение указателя на функцию 190
Получение адреса функции 190
Объявление указателя на функцию 190
Использование указателя для вызова функции 191
Резюме 192
Вопросы для повторения 193
Упражнения по программированию 193
Глава 8. Работа с функциями 196
Встроенные функции 196
Ссылочные переменные 198
Создание ссылочных переменных 198
Ссылки в роли параметров функции 200
Примечания к программе 202
Свойства и особенности ссылок 202
Временные переменные, ссылочные аргументы и модификатор 203
const
Использование ссылок при работе со структурами 204
Примечание к программе 205
Некоторые соображения по вопросу о том, когда возвращать 206
ссылку или указатель
Когда имеет смысл пользоваться ссылочными аргументами 207
Аргументы, заданные по умолчанию 207
Примечания к программе 209
Полиморфизм функций (перегрузка функции) 209
Пример перегрузки 211
Когда целесообразно использовать
перегрузку функции 212
Шаблоны функций 212
Перегруженные шаблоны 214
Явная специализация 215
Метод первой генерации 216
Вторая генерация 216
Третья генерация 216
Пример 217
Образование шаблонов и специализация 218
Выбор функций 219
Точное соответствие и наилучшее соответствие 220
Функции со многими аргументами 221
Раздельная компиляция 221
Классы памяти, диапазоны доступа и связывание 224
Диапазон доступа и связывание 224
Автоматическая память 225
Автоматические переменные и работа со стеком 226
Переменные типа register 227
Статический класс памяти 228
Внешние переменные 228
Примечания к программе 229
Модификатор static (локальные переменные) 230
Связывание и внешние переменные 231
Спецификаторы классов памяти:const, volatile и mutable 233
Более подробно о спецификаторе const 234
Классы памяти и функции 235
Языковое связывание 235
Классы памяти и динамическое распределение 236
Пространства имен 236
Традиционные пространства имен языка C++ 237
Новые свойства пространства имен 238
Объявления использования и директивы using 238
Немного больше о свойствах пространства имен 240
Неименованные пространства имен 241
Пространства имен и будущее 241
Резюме 241
Вопросы для повторения 242
Упражнения по программированию 243
Глава 9. Объекты и классы 245
Процедурное и объектно-ориентированное программирование 245
Абстрагирование и классы 246
Что представляет собой тип 247
Класс 247
Общедоступный или приватный? 249
Реализация классов и функций-элементов 250
Примечания, касающиеся функций-элементов 251
Встроенные методы 252
Выбор объекта 252
Использование классов 253
Текущее состояние дел 254
Деструкторы и конструкторы классов 255
Объявление и определение конструкторов 256
Использование конструктора 256
Конструктор, заданный по умолчанию 257
Деструкторы 258
Совершенствование класса Stock 258
Заголовочный файл 259
Файл реализации 259
Клиентский файл 260
Примечания к программе 260
Функции-элементы типа const 261
Обзор конструкторов и деструкторов 262
Работа с указателем this 263
Массив объектов 266
Диапазон доступа класса 267
Абстрактный тип данных 268
Резюме 271
Вопросы для повторения 272
Упражнения по программированию 272
Глава 10. Работа с классами 274
Перегрузка операций 275
Время в нашем распоряжении 276
Добавление операции сложения 277
Ограничения при выполнении перегрузки 278
Другие перегруженные операции 279
Использование дружественных структур 280
Создание дружественных конструкций 281
Общий вид дружественной конструкции: перегрузка операции << 282
Первая версия перегрузки операции << 282
Вторая версия перегрузки операции << 283
Перегруженные операции: дружественные и обычные функции 285
Перегрузка: класс Vector 286
Использование элементов состояния 291
Еще немного о перегрузке 291
Умножение 292
Некоторые уточнения: перегрузка и перегруженная операция 292
Комментарий к реализации 293
Применение класса Vector к решению задачи случайного блуждания 293
Примечания к программе 295
Автоматические преобразования и приведение типов для классов 295
Примечания к программе 298
Функции преобразования 299
Автоматическое выполнение преобразования типов 300
Преобразования и дружественные конструкции 302
Осуществление выбора 303
Резюме 303
Вопросы для повторения 304
Упражнения по программированию 305
Глава 11. Классы и динамическое распределение памяти 306
Динамическая память и классы 306
Обзорный пример и элементы статических классов 307
Примечания к программе 311
Новый подход к использованию операторов new и delete 313
Устранение проблем, связанных с классом String 314
Неявные функции-элементы 315
Конструктор, заданный по умолчанию 315
Конструктор копирования 315
Условия применения конструктора копирования 315
Функции конструктора копирования 316
К чему могут привести возможные ошибки 316
Оператор присваивания 318
Применение оператора присваивания 318
Функции оператора присваивания 319
К чему могут привести возможные ошибки 319
Фиксированное присваивание 319
Новый, усовершенствованный класс String 320
Применение оператора new в конструкторах 325
Применение указателей при работе с объектами 326
Обзор технических методов 328
Перегрузка операции << 328
Функции преобразования 329
Классы, конструкторы которых применяют оператор new 329
Моделирование очереди 329
Класс Queue 330
Интерфейс 330
Реализация 330
Методы класса 332
Немного сведений о других методах классов 334
Класс Customer 335
Моделирование 338
Резюме 341
Вопросы для повторения 342
Упражнения по программированию 343
Глава 12. Наследование классов 345
Простой базовый класс 346
Наследование — отношение is-a 347
Объявление производного класса 349
Реализация производного класса 351
Инициализация объектов объектами 352
Другие функции-элементы 352
Примечания к программе 355
Управление доступом — protected 355
Отношение is-a, ссылки и указатели 356
Виртуальные функции-элементы 357
Активизация динамического связывания 358
Зачем нужны два вида связывания? 360
Как работают виртуальные функции 361
Что следует знать о виртуальных функциях 362
Конструкторы 362
Деструкторы 362
Дружественные конструкции 362
Отсутствие переопределения 362
Переопределение скрывает методы 362
Наследование и присваивание 363
Смешанное присваивание 364
Присваивание и динамическое распределение памяти 365
Случай 1. Производный класс не использует оператор new 366
Случай 2. Производный класс использует оператор new 367
Абстрактные базовые классы 370
Обзор структуры класса 371
Функции-элементы, которые генерирует компилятор 371
Заданный по умолчанию конструктор 371
Конструктор копирования 372
Оператор присваивания 372
Другие соображения по поводу методов класса 372
Конструкторы 372
Деструкторы 372
Преобразования 373
Передача объекта по значению и передача по ссылке 373
Возврат объекта и ссылки 373
Использование const 374
Соображения по поводу общедоступного наследования 374
Отношение is-a 374
Какие объекты не наследуются 375
Оператор присваивания 375
Приватные и защищенные элементы 376
Виртуальные методы 376
Деструкторы 376
Итоговый анализ функций класса 377
Резюме 377
Вопросы для повторения 378
Упражнения по программированию 378
Глава 13. Повторное использование программного кода в C++ 381
Классы, включающие элементы объектов 381
Класс ArrayDb 382
Работа с operator[]() 384
Альтернатива с использованием спецификатора const 384
Пример класса Student 385
Инициализация включенных объектов 385
Использование интерфейса для включенного объекта 388
Использование нового класса 389
Приватное наследование 390
Пример класса Student (новая версия) 390
Инициализация компонентов базового класса 390
Использование методов базового класса 391
Использование измененного класса Student 392
Включение или приватное наследование? 393
Защищенное наследование 393
Переопределение доступа с помощью объявления using 394
Шаблоны классов 394
Определение шаблона класса 395
Использование класса шаблона 397
Более подробное рассмотрение шаблона класса 398
Неправильное использование стека указателей 398
Корректное использование стека указателей 399
Примечания к программе 401
Шаблон массива и аргументы, не являющиеся типами 401
Использование шаблона вместе с семейством классов 402
Примечание к программе 406
Многосторонность шаблона 406
Специализации шаблонов 408
Неявные образования экземпляров 408
Явные образования экземпляров 408
Явные специализации 408
Частичные специализации 409
Множественное наследование 409
Определение количества рабочих 410
Виртуальные базовые классы 411
Новые правила конструктора 412
Выбор метода 412
Смешанные виртуальные и невиртуальные базовые классы 414
Виртуальные базовые классы и доминирование 414
Некоторые итоги по теме множественного наследования 419
Резюме 420
Вопросы для повторения 421
Упражнения по программированию 422
Глава 14. Дружественные конструкции, исключения и прочее 424
Дружественные структуры 424
Дружественные классы 424
Дружественные функции-элементы 428
Другие дружественные отношения 429
Общедоступные дружественные элементы 431
Шаблоны и дружественные элементы 431
Вложенные классы 432
Вложенные классы и доступ 433
Диапазон доступа 433
Управление доступом 434
Вложение в шаблоне 434
Исключения 437
Примечания к программе 439
Механизм исключений 439
Примечания к программе 439
Разносторонность исключений 441
Многочисленные блоки try 442
Разворачивание стека 443
Дополнительные опции 444
Исключения и классы 445
Исключения и наследование 446
Класс exception 451
Исключение bad_alloc и оператор new 453
Проблемы, связанные с исключениями 453
Замечание об исключениях 455
Библиотека RTTI 456
Назначение RTTI 456
Принципы функционирования RTTI 456
Оператор dynamic_cast 457
Оператор typeid и класс type_info 458
Проблемы, возникающие при использовании RTTI 461
Операторы приведения типов 462
Резюме 463
Вопросы для повторения 464
Упражнения по программированию 464
Глава 15. Класс string и стандартная библиотека шаблонов 465
Класс string 465
Создание строки 465
Примечания к программе 466
Реализация ввода в классе string 468
Работа со строками 469
Примечания к программе 472
Что еще? 472
Класс auto_ptr 472
Использование шаблона auto_ptr 473
Некоторые замечания 474
Стандартная библиотека шаблонов 475
Класс шаблонов vector 476
Операции, допустимые при работе с шаблонами vector 477
Дополнительные операции с векторами 480
Обобщенное программирование 483
Почему именно итераторы? 483
Типы итераторов 486
Итератор ввода 486
Итератор вывода 486
Прямой итератор 487
Двусторонний итератор 487
Итератор произвольного доступа 487
Иерархия итераторов 488
Концепции, уточнения и модели 488
Указатель как итератор 489
Итераторы сору(), ostream_iterator и istream_iterator 489
Другие полезные итераторы 490
Типы контейнеров 492
Концепция контейнера 493
Последовательности 495
Класс vector 496
Класс deque 497
Класс list 497
Примечания к программе 498
Инструментарий для работы с контейнером list 499
Класс queue 499
Класс priority_queue 499
Класс stack 500
Ассоциативные контейнеры 500
Пример класса set 500
Пример класса multimap 503
Функциональные объекты (функторы) 504
Концепции функторов 505
Предопределенные функторы 506
Адаптируемые функторы и функции-адаптеры 507
Алгоритмы 508
Группы алгоритмов 509
Общие свойства 509
Использование STL 510
Другие библиотеки 513
Резюме 513
Вопросы для повторения 514
Упражнения по программированию 514
Глава 16. Ввод/вывод данных и работа с файлами 516
Обзор ввода/вывода данных в C++ 516
Потоки и буферы 517
Потоки, буферы и файл iostream 518
Перенаправление 520
Вывод с помощью cout 520
Перегруженная операция << 521
Вывод и указатели 521
Конкатенация вывода 522
Другие методы класса ostream 522
Очистка буфера вывода 523
Форматирование вывода с помощью cout 524
Изменение системы счисления при выводе 525
Установка ширины полей 526
Символы-заполнители 527
Установка точности при выводе чисел с плавающей точкой 527
Вывод замыкающих нулей и десятичной точки 528
Подробнее о функции setf() 528
Стандартные манипуляторы 532
Заголовочный файл iomanip 533
Ввод данных с помощью cin 534
Как cin >> рассматривает поток ввода 535
Состояние потока 536
Установка состояния 536
Ввод/вывод и прерывания 537
Эффекты состояния потока 537
Другие методы класса istream 538
Односимвольный ввод 538
Выбор формы односимвольного ввода 540
Строковый ввод: getline(), get() и ignore() 540
Неожиданный строковый Ввод 542
Другие методы класса istream 543
Примечания к программе 544
Ввод/вывод файлов 545
Простой файловый ввод/вывод 546
Открытие нескольких файлов 548
Работа в режиме командной строки 548
Проверка потока и функция is _open() 550
Режимы файлов 550
Добавление к файлу 552
Двоичные файлы 554
Произвольный доступ к файлам 557
Внутреннее форматирование 560
Что дальше? 564
Резюме 564
Вопросы для повторения 565
Упражнения по программированию 566
Приложение А. Системы счисления 568
Восьмеричные числа 568
Шестнадцатиричные числа 568
Двоичные числа 569
Двоичные и шестнадцатиричные числа 569
Приложение В. Ключевые слова языка C++ 570
Приложение С. Таблица кодов ASCII 571
Приложение D. Приоритет операций 575
Приложение Е. Другие операции 578
Поразрядные операции 578
Операции смещения 578
Логические поразрядные операции 579
Несколько стандартных приемов по работе с битами 580
Установка бита 580
Переключение бита 580
Отмена установленного бита 581
Проверка значения бита 581
Операции разыменования элементов 581
Приложение F. Класс шаблона STRING 583
Тринадцать типов и констант 583
Информация о данных, конструкторах и другие сведения 584
Стандартные конструкторы 585
Конструкторы, использующие массив 586
Конструкторы, использующие часть массива 586
Конструктор копирования 586
Конструктор, использующий п копий символа 587
Конструкторы, использующие диапазон значений 587
Ячейки памяти 587
Доступ к строке 588
Базовые методы присваивания 588
Поиск строковых величин 588
Семейство методов find() 588
Семейство методов rfind() 589
Семейство методов find_first_of() 589
Семейство методов find_last_of() 589
Семейство методов find_first_not_of() 589
Семейство методов find_last_not_of() 590
Функции и методы сравнения 590
Модификаторы строковых значений 591
Конкатенирование и дописывание 591
Дополнительные средства присваивания 591
Методы вставки 591
Методы удаления 592
Методы замены 592
Другие методы изменения: сору() и swap() 592
Вывод и ввод данных 593
Приложение G. Методы и функции библиотеки STL 594
Элементы, общие для всех контейнеров 594
Дополнительные элементы для векторов,списков и очередей с 595
двухсторонним доступом
Дополнительные элементы для наборов и карт 596
Функции STL 597
Неизменяющаяся последовательность операций 598
Изменяющаяся последовательность операций 601
Операции сортировки и связывания 606
Сортировка 606
Двоичный поиск 608
Слияние 609
Операции над наборами 609
Операции над кучей 611
Минимум и максимум 611
Перестановки 612
Операции с числами 613
Приложение Н. Рекомендуемая литература 615
Стандарт ISO/ANSI 616
Приложение I. Преобразование программного кода в соответствии со 617
стандартом ANSI/ISO C++
Директивы препроцессора 617
При объявлении констант лучше использовать const вместо #define 617
Для определения небольших функций используйте ключевое слово 618
inline вместо #define
Используйте прототипы функций 619
Приведение типов 619
Познакомьтесь со свойствами языка C++ 619
Используйте новую структуру заголовочных файлов 619
Использование пространств имен 619
Использование шаблона autoptr 620
Использование класса string 620
Использование STL 621
Приложение J. Ответы на вопросы для повторения 622
Предметный указатель 634

Предметный указатель
Символы Алгоритм 508
* 96 Аргумент 34, 44
++ 122 заданный по умолчанию 207
-- 122 Арифметические операции 70
<< 37, 521 Ассоциативность 71
= 41 Б
|| 148 Байт 54
А Библиотека 27
Абстрагирование 246 RTTI 456
Автоматическая память 225 STL 594
символьных функций cctype 153 двусторонний 487
Бит 54 другие 490
Буфер 517 произвольного доступа 487
В прямой 487
Ввод 87 К
смешанный строчно-числовой 87 Квалификатор 65
данных 534 const 65
текста 134 Класс
Ввод/вывод 516, 545, 593 Allocator 472
перенаправление 520 Auto_ptr 472
Вектор 286, 476 Customer 335
Виртуальные методы 376 Deque 497
Виртуальный базовый класс 411 Ellipse 370
Вывод данных 37 Exception 451
Выражение 70, 126 Istream 43
сравнения 126 Ust 497
Д Multimap 503
Двоичный поиск 608 Ostream 43, 521, 525
Деструктор 255, 264, 362, 372 Priority_queue 499
Диапазон доступа класса 224, 250, 267 Push_back() 496
Динамическая память 306 Push_front() 496
Динамическое распределение памяти Queue 330, 499
236, 365 Stack 500
Динамическое связывание 358 Stock 258
Директива Using 37, 238 String 307, 320, 465, 583
Дружественные элементы 431 конструкторы 466
З Vector 26, 476, 496
Значащие цифры 67 абстрактный базовый 370
И базовый 346
Имена в C++ 236 виртуальный базовый 411
Индекс 80 включающий элементы объектов
Инициализация 55 381
Инкапсуляция 249 вложенный 332, 432
Интегрированная среда разработки диапазон доступа 433
(IDE) 27, 29 дружественный 424
Исключения 437 наследование 345
Bad_alloc 453 производный 346
непредвиденное 453 шаблоны классов 394
Исходный код 26 Классы памяти 227, 235
Итератор 486 статические 228
сору() 489 Ключевые слова языка C++ 48, 570
istream_iterator 489 Командная строка 548
ostreamjterator 489 Комментарий 35
ввода 486 Компилятор 22
вывода 486 Компиляция 28, 221
раздельная 221 Write() 555
Компоновка 28 виртуальный 376
Компьютер 40 включения 381
Конкатенация строк 83 встроенный 252
Константы 56, 59, 62 приватного и защищенного
с плавающей точкой 69 наследования 381
символические 56 сравнения 590
символьные 62 Множественное наследование 409
целочисленные 59 Моделирование 338
Конструктор 255, 262, 362, 372, 585 Модификатор 230, 591
копирования 315, 372, 586 static 230
стандартный 585 const 203
строковый 585 Н
Контейнер 492, 493, 500 Наследование 363, 390, 446
ассоциативный 500 приватное 390
Куча 611 Нехватка памяти 100
Л О
Лексема 39 Область имен 36, 37
Логические выражения 148 Обобщенное программирование 483
Логические операции 145 Объединение 92
М анонимное 93
Малые целые числа 60 Объест 23, 37, 245, 520
Массив 59, 79, 103, 140, 172 cin 42, 534
Двумерный 140 cout 37, 520
Динамический 101 Объектно-ориентированное
Имя массива 106 программирование 249
Индекс 80 Операнд 70
Метод Оператор 34, 40, 55, 62, 99, 122, 145,
Begin() 485 453
Сору() 592 ?: 154
End() 485 break 158
Erase() 478, 592 continue 158
Find() 588 if 145
Find_first_not_of() 589 if else 146
Find_first_of() 589 If else if else 147
Find_last_not_of() 590 new 99, 101, 325, 453
Find_last_of() 589 switch 155
Get(char &) 541 декремента (--) 122
Get(void) 541 "запятая" 124
Insert() 591 инкремента (++) 122
Read() 555 комбинированные операторы
Replace() 592 присваивания 123
Rfind() 589 объявления 40
Swap() 592 приведения типов 462
Width() 526 принадлежности 62
присваивания 41, 375 типа register 227
составной 123 Переносимость 25
Операция 55, 70, 96, 145, 148, 521 Перестановки 612
* (косвенное значение) 96 Перечисления 93
<< 521 Подпрограмма 47
арифметическая 70 Поиск
деления 71 двоичный 608
логическая 145 Полиморфизм 209
И (&&) 149 Последовательность 495
ИЛИ (||) 148 Поток 517
НЕ(!) 151 Преобразование типов данных 73
приоритет операций 71 Препроцессор C++ 36
над наборами 609 Приватное наследование 390
Операционная система 22 Приведение типов 75
Освобождение памяти 100 Приоритет операций 71, 575
Отношение 347, 374, 381 Присваивание 363
has-a ("содержит объект") 348, смешанное 364
381 Профаммирование 21, 245, 483
is-a ("является объектом") 347, обобщенное 24, 483
374, 382 объектно-ориентированное 21, 23,
uses-a 348 245,249
Очередь 329 процедурное 21, 23, 245
П сверху вниз 23
Память 95, 99, 111, 225, 236, 306 снизу вверх 24
автоматическая 111, 225 структурное 23
динамическая 236, 306 Произвольный доступ к файлам 557
нехватка памяти 100 Пространство имен 236
освобождение памяти 100 Прототип 167
распределение 99 Процедура 47
свободная 95, 111 Псевдоним типа 133
статическая 111 Р
Параметр 34, 44 Раздельная компиляция 221
Перегрузка 209 Разрядные поля 92
операции 38, 275 Распределение памяти
<< 282, 328 динамическое 236, 365
Переменная 40, 52, 112, 198 Расширение типов 558
Boolean 65 Рекурсия 188
автоматическая 112 С
внешняя 228, 232 Свободная память 95
временная 203 Связывание 101, 227, 231, 235, 358
глобальная 230 динамическое 101, 105, 358
именование 53 статическое 101, 105, 357
локальная 230 языковое 235
простая 52 Сигнатура 210
ссылочная 198 Символ
-заполнитель 527 с плавающей точкой (float, double
новой строки (\n) 38 и long double) 67
сигнальной метки 134 символьный (char) 62
Символические константы 56 целочисленный (short, int и long)
Система счисления 568 54
восьмеричная 568 У
двоичная 569 Указатель 95, 98, 103, 106, 173,
шестнадцатиричная 568 326,356,521
Слияние 609 this 263 j
Сокрытие данных 249 арифметика указателей 105
Сортировка 481, 606 на функции 189 >
Специализация 215, 218, 396, 408 объявление указателей 105
явная 215 присвоение значений указателям
Спецификатор const 179 105
Спецификаторы классов памяти 233 разыменование указателей 105
Сравнение строк 128 Управление доступом 355
Среда разработки 27 Управляющие последовательности
Ссылка 200, 356 языка C++ 63
Стандарт 25 Ф
ANSI 31 Файл 36, 518
ISO/ANSI 616 iomanip 533
Стандартная библиотека шаблонов iostream 36, 518
(STL) 465, 475 Флаг 528
Стандартные конструкторы 585 Форматирование 560
Статический класс памяти 228 внутреннее 560
Статическое связывание 357 Функции 428
Стек 270, 443 дружественные 428
Стоун 49 Функции-адаптеры 507
Строка 37, 82 Функциональные объекты (функторы)
конкатенация строк 83 504
Структура 88, 183, 250, 332 адаптируемые 507
вложенная 332 предопределенные 506
динамическая 109 Функция
дружественная 280 Accumulate() 613
Т Adjacent_difference() 614
Таблица 361 Adjacent_find() 600
Таблица кодов ASCII 571 Binary_search() 609
Тип данных 54, 247, 268 Cin.get() 540
Boolean 65 Cin.get(ch) 540
абстрактный 268 Cin.get(char) 135
без знака (unsigned) 57 Copy() 489, 601
основной (char, short, int и long) Copy_backward() 601
54 Count if() 600
преобразование типов данных 73 Count() 600
Cout.put() 62
Equal() 600 Precision() 527
Equal_range() 609 Previous_permutation() 613
Exit() 252 Printf() 42
Fill() 604 Push_heap{) 611
Fill_n() 604 Putbackf) 543
Find() 480, 599 Random_shuffle() 605
Find_ar() 485 Read() 543
Find_end() 599 Remove() 604
Find_first_of() 600 Remove_copy() 604
Find_if() 599 Remove_copyjf() 604
Find_ll() 485 Remove_if() 604
For_each() 599 Replace()_if 603
Gcount() 543 Replace_copy() 603
Generator() 604 Replace_copy_if() 603
Generator_n() 604 Reverse_copy() 605
Get() 540 Reversed 605
Get(char *, int, char) 541 Rotated 605
Getline() 85, 540 Rotate_copy() 605
Getline(char *, int, char) 542 Search() 601
Ignore() 540 Search_n() 601
Includes() 610 Seekg() 558
Inner_product() 614 Set_difference() 610
Inplace_merge() 609 Set_intersection() 610
Is_open() 550, 552 Set_symmetric_difference() 611
Isspace() 538 Set_union() 610
Iter_swap() 603 Setf() 528
Lexicographical_compare() 612 Sort() 480, 606
Lower_bound() 608 Sqrt() 45
Main() 33 Stable_partition() 606
Makeheap() 611 Stable_sort() 608
Max() 612 Strcmp() 320
Max_element() 612 Swap() 603
Merge() 609 Swap_ranges() 603
Min() 612 Transform() 603
Min_etement() 612 Unique() 605
Next_permutation() 613 Unique copy() 605
Nth_element() 608 Upper_bound() 608
Operator>() 320 WorseThan() 481
Partial_sort() 608 аргументы 169
Partial_sort_copy() 608 встроенная 196
Partial_sum() 614 вызов 166
Partition() 605 обзор 164
Peek() 543 определяемая пользователем 47
Pop_heap() 611 прототипирование 166
Pow() 46 со многими аргументами 221
сравнения 590 перегруженный 214
Функция-элемент 62, 250, 309, 357 Э
виртуальная 357, 362, 371 Экземпляр 396
неявная 315 шаблона 218
свойства 377 Элемент
статическая 309 статических данных 308
Ц статического класса 307
Целочисленная константа 59 дружественный 431
Целые числа 54, 60 Я
Цикл 115 Язык 22
Do while 135 Ассемблер 22
For 115 машинный 26
While 129 С 22
вложенный 140 C++ 24
шаг цикла 117 Иностранные термины
Цифры ADT - abstract data types 271
значащие 67 ANSI 31
Ч FIFO 329
Числа 54, 100 IDE 29
с плавающей точкой 66 целые 54 UFO 270, 329
Ш RTTI 456
Шаблон 212, 412, 431 STL - Standard Template Library 465,
класса 394, 412 594