Язык программирования C++ Part 001

Page 1

С.Прата ЯЗЫК ПРОГРАММИРОВАНИЯ C++. ЛЕКЦИИ И УПРАЖНЕНИЯ Изучение языка программирования C++ является приключением, ведущим к открытиям. Это связано с тем, что C++ непрерывно развивается. В этой книге рассказывается о стандартном языке C++ без привязки к какому-либо одному виду компьютера, операционной системы или компилятора. Здесь вы найдете подробнейшее описание синтаксиса языка, сопровождаемое многочисленными практическими примерами. Цель книги - научить читателя создавать эффективные программы и получать от этого удовольствие. Издание рассчитано на пользователей с любым уровнем подготовки. Для начинающих эта книга послужит превосходным учебником, а опытные программисты смогут воспользоваться ею в качестве справочника, облегчающего их ежедневный труд. Учитывая уровень рассмотрения теоретических вопросов и наличие тщательно подобранных упражнений, книгу можно рекомендовать как методическое пособие преподавателям высших и средних учебных заведений, а также в качестве учебника для студентов. Краткое оглавление Глава 1. Готовимся изучать язык C++ Глава 2. Приступаем к изучению языка C++ Глава 3. Представление данных Глава 4. Производные типы данных Глава 5. Циклы и выражения сравнения Глава 6. Операторы ветвления и логические операции Глава 7. Функции языка C++ Глава 8. Работа с функциями Глава 9. Объекты и классы Глава 10. Работа с классами Глава 11. Классы и динамическое распределение памяти Глава 12. Наследование классов Глава 13. Повторное использование программного кода в C++ Глава 14. Дружественные конструкции, исключения и прочее Глава 15. Класс string и стандартная библиотека шаблонов Глава 16. Ввод/вывод данных и работа с файлами Приложение А. Системы счисления Приложение В. Ключевые слова языка C++ Приложение С. Таблица кодов ASCII Приложение D. Приоритет операций Приложение Е. Другие операции Приложение F. Класс шаблона STRING Приложение G. Методы и функции библиотеки STL Приложение Н. Рекомендуемая литература Приложение I. Преобразование программного кода в соответствии со стандартом ANSI/ISO C++

21 32 52 79 115 145 164 196 245 274 306 345 381 424 465 516 568 570 571 575 578 583 594 615 617


Приложение J. Ответы на вопросы для повторения Предметный указатель

622 634

Оглавление Глава 1. Готовимся изучать язык C++ Изучение языка C++ Немного истории Язык С Философия программирования, заложенная в языке С Объектно-ориентированное программирование Обобщенное программирование Язык C++ Переносимость и стандарты Методика создания программ Создание исходного кода Компиляция и компоновка Компиляция и компоновка в операционной системе UNIX Реализации Turbo C++ 2.0 и Borland C++ 3.1 (DOS) Компиляторы для операционной системы Windows Компиляторы для компьютеров Macintosh Соглашения, используемые в этой книге Наша система Глава 2. Приступаем к изучению языка C++ Начальные сведения о языке C++ Функция main() Заголовок функции в роли интерфейса Когда функция main() не соответствует своему названию? Комментарии в языке C++ Препроцессор C++ и файл iostream Имена заголовочных файлов Области имен Вывод данных в языке C++ с использованием объекта cout Символ новой строки (\n) Форматирование исходного кода C++ Формат исходного кода программ C++ Краткие сведения об операторах языка C++ Операторы объявления и переменные Оператор присваивания Важный момент, связанный с объектом cout Еще несколько операторов языка C++ Применение объекта cin И снова объект cout Несколько слов о классах Функции Применение функций с возвращаемым значением

21 21 22 22 23 23 24 24 25 26 27 28 28 29 29 30 31 31 32 32 33 34 35 35 36 36 36 37 38 39 40 40 40 41 41 42 42 43 43 44 44


Разновидности функций Функции, определяемые пользователем Формат определения функции Заголовки функций Определяемая пользователем функция с возвращаемым значением Итак, операторы Резюме Вопросы для повторения Упражнения по программированию Глава 3. Представление данных Простые переменные Имена переменных Целочисленные типы данных Типы даных short, int и long Примечания к программе Типы данных без знака Какой тип выбрать? Целочисленные константы Определение типа константы в C++ Тип данных char: символы и малые целые числа Примечания к программе Функция-элемент: cout.put() Константы типа char Типы данных signed char и unsigned char Тип данных wchar_t Новый тип данных bool Квалификатор const Числа с плавающей точкой Запись чисел с плавающей точкой Типы данных с плавающей точкой Примечания к программе Константы с плавающей точкой Преимущества и недостатки типов данных с плавающей точкой Арифметические операции языка C++ Приоритет операций и ассоциативность Разновидности операции деления Операция деления по модулю Преобразования типов данных Преобразование при присваивании Преобразования данных в выражениях Преобразования данных при передаче аргументов Приведение типов Резюме Вопросы для повторения Упражнения по программированию

46 47 47 48 49 50 50 51 51 52 52 53 54 54 56 57 58 59 60 60 61 62 62 64 64 65 65 66 66 67 69 69 69 70 71 71 72 73 73 74 75 75 77 77 78


Глава 4. Производные типы данных Краткий обзор массивов Примечания к программе Еще об инициализации массива Строки Конкатенация строк Использование строк в массиве Примечания к программе Возможные нюансы при строковом вводе Строчно-ориентированный ввод: getline() и get() Пустые строки и другие проблемы Смешанный строчно-числовой ввод Краткий обзор структур Примечания к программе Другие свойства структуры Массивы структур Разрядные поля Объединения Перечисления Установка значений перечислителя Диапазоны значений для перечислений Указатели и свободная память Объявление и инициализация указателей Указатели и числа Распределение памяти с помощью оператора new Примечания к программе Освобождение памяти с помощью оператора delete Использование оператора new для создания динамических массивов Создание динамического массива с помощью оператора new Использование динамического массива Указатели, массивы и арифметика указателей Примечания к программе Основные сведения об указателях Указатели и строки Примечания к программе Использование оператора new для создания динамических структур Пример использования операторов new и delete Примечания к программе Автоматическая, статическая и свободная память Автоматические переменные Статическая память Свободная память Резюме Вопросы для повторения

79 79 81 81 82 83 83 84 84 85 87 87 88 90 90 91 92 92 93 94 94 95 97 98 99 100 100 101 101 102 103 104 105 106 106 109 110 111 111 112 112 112 112 113


Упражнения по программированию Глава 5. Циклы и выражения сравнения Обзор возможностей цикла for Составные элементы цикла for Выражения и операторы Операторы и выражения Незначительное нарушение правил Снова о цикле for Примечания к программе Изменение шага цикла Доступ к символам строки с помощью цикла for Операторы инкремента (++) и декремента (--) Комбинированные операторы присваивания Составные операторы или блоки Оператор "запятая" (или дополнительные синтаксические приемы) Примечания к программе Особенности применения оператора "запятая" Выражения сравнения Типичная ошибка программирования Сравнение строк Примечания к программе Цикл while Примечания к программе Сравнение циклов for и while Небольшая пауза Цикл do while Циклы и ввод текста Применение простого оператора cin для ввода данных Примечания к программе На помощь приходит функция cin.get(char) Выбор функции cin.get() Условие конца файла Конец файла означает конец ввода Распространенные идиомы Еще одна разновидность функции cin.get() Вложенные циклы и двумерные массивы Инициализация двумерного массива Резюме Вопросы для повторения Упражнения по программированию Глава 6. Операторы ветвления и логические операции Оператор if Оператор if else Форматирование операторов if else Конструкция if else if else

114 115 115 116 117 119 119 120 120 121 121 122 123 123 124 125 126 126 126 128 129 129 130 131 132 133 134 134 135 135 136 136 137 138 138 140 141 142 143 143 145 145 146 147 147


Логические выражения Операция логического ИЛИ: || Операция логического И: && Примечания к программе Определение диапазонов с помощью операции && Примечания к программе Операция логического НЕ: ! Примечания к программе Немного о логических операциях Библиотека символьных функций cctype Оператор ?: Оператор switch Использование перечислителей в качестве меток Операторы switch и if else Операторы break и continue Примечания к программе Циклы считывания чисел Примечания к программе Резюме Вопросы для повторения Упражнения по программированию Глава 7. Функции языка C++ Обзор функций Определение функции Прототипирование и вызов функций Почему именно прототипы? Синтаксис прототипа Польза прототипов Аргументы функции и передача по значению Функции с несколькими аргументами Примечания к программе Еще одна функция с двумя аргументами Примечания к программе Функции и массивы Массивы и указатели (продолжение) Трудности, возникающие при использовании массивов в качестве аргументов Примечания к программе Другие виды функций, выполняющих обработку массивов Заполнение массива Отображение массива и его защита с помощью спецификатора const Модификация элементов массива Объединение частей в единое целое Примечания к программе

148 148 149 150 150 151 151 152 152 153 154 155 157 157 158 158 159 161 161 161 162 164 164 165 166 167 167 168 169 169 171 171 172 172 173 174 175 176 176 177 177 178 179


Указатели и спецификатор const Функции и строки в стиле С Примечания к программе Функции, возвращающие строки Примечания к программе Функции и структуры Передача и возврат структур Еще один пример Примечания к программе Передача адресов структур Рекурсия Примечания к программе Указатели на функции Назначение указателя на функцию Получение адреса функции Объявление указателя на функцию Использование указателя для вызова функции Резюме Вопросы для повторения Упражнения по программированию Глава 8. Работа с функциями Встроенные функции Ссылочные переменные Создание ссылочных переменных Ссылки в роли параметров функции Примечания к программе Свойства и особенности ссылок Временные переменные, ссылочные аргументы и модификатор const Использование ссылок при работе со структурами Примечание к программе Некоторые соображения по вопросу о том, когда возвращать ссылку или указатель Когда имеет смысл пользоваться ссылочными аргументами Аргументы, заданные по умолчанию Примечания к программе Полиморфизм функций (перегрузка функции) Пример перегрузки Когда целесообразно использовать перегрузку функции Шаблоны функций Перегруженные шаблоны Явная специализация Метод первой генерации Вторая генерация

179 180 181 182 182 183 183 184 186 187 188 189 189 190 190 190 191 192 193 193 196 196 198 198 200 202 202 203 204 205 206 207 207 209 209 211 212 212 214 215 216 216


Третья генерация Пример Образование шаблонов и специализация Выбор функций Точное соответствие и наилучшее соответствие Функции со многими аргументами Раздельная компиляция Классы памяти, диапазоны доступа и связывание Диапазон доступа и связывание Автоматическая память Автоматические переменные и работа со стеком Переменные типа register Статический класс памяти Внешние переменные Примечания к программе Модификатор static (локальные переменные) Связывание и внешние переменные Спецификаторы классов памяти:const, volatile и mutable Более подробно о спецификаторе const Классы памяти и функции Языковое связывание Классы памяти и динамическое распределение Пространства имен Традиционные пространства имен языка C++ Новые свойства пространства имен Объявления использования и директивы using Немного больше о свойствах пространства имен Неименованные пространства имен Пространства имен и будущее Резюме Вопросы для повторения Упражнения по программированию Глава 9. Объекты и классы Процедурное и объектно-ориентированное программирование Абстрагирование и классы Что представляет собой тип Класс Общедоступный или приватный? Реализация классов и функций-элементов Примечания, касающиеся функций-элементов Встроенные методы Выбор объекта Использование классов Текущее состояние дел Деструкторы и конструкторы классов

216 217 218 219 220 221 221 224 224 225 226 227 228 228 229 230 231 233 234 235 235 236 236 237 238 238 240 241 241 241 242 243 245 245 246 247 247 249 250 251 252 252 253 254 255


Объявление и определение конструкторов Использование конструктора Конструктор, заданный по умолчанию Деструкторы Совершенствование класса Stock Заголовочный файл Файл реализации Клиентский файл Примечания к программе Функции-элементы типа const Обзор конструкторов и деструкторов Работа с указателем this Массив объектов Диапазон доступа класса Абстрактный тип данных Резюме Вопросы для повторения Упражнения по программированию Глава 10. Работа с классами Перегрузка операций Время в нашем распоряжении Добавление операции сложения Ограничения при выполнении перегрузки Другие перегруженные операции Использование дружественных структур Создание дружественных конструкций Общий вид дружественной конструкции: перегрузка операции << Первая версия перегрузки операции << Вторая версия перегрузки операции << Перегруженные операции: дружественные и обычные функции Перегрузка: класс Vector Использование элементов состояния Еще немного о перегрузке Умножение Некоторые уточнения: перегрузка и перегруженная операция Комментарий к реализации Применение класса Vector к решению задачи случайного блуждания Примечания к программе Автоматические преобразования и приведение типов для классов Примечания к программе Функции преобразования Автоматическое выполнение преобразования типов Преобразования и дружественные конструкции Осуществление выбора Резюме

256 256 257 258 258 259 259 260 260 261 262 263 266 267 268 271 272 272 274 275 276 277 278 279 280 281 282 282 283 285 286 291 291 292 292 293 293 295 295 298 299 300 302 303 303


Вопросы для повторения Упражнения по программированию Глава 11. Классы и динамическое распределение памяти Динамическая память и классы Обзорный пример и элементы статических классов Примечания к программе Новый подход к использованию операторов new и delete Устранение проблем, связанных с классом String Неявные функции-элементы Конструктор, заданный по умолчанию Конструктор копирования Условия применения конструктора копирования Функции конструктора копирования К чему могут привести возможные ошибки Оператор присваивания Применение оператора присваивания Функции оператора присваивания К чему могут привести возможные ошибки Фиксированное присваивание Новый, усовершенствованный класс String Применение оператора new в конструкторах Применение указателей при работе с объектами Обзор технических методов Перегрузка операции << Функции преобразования Классы, конструкторы которых применяют оператор new Моделирование очереди Класс Queue Интерфейс Реализация Методы класса Немного сведений о других методах классов Класс Customer Моделирование Резюме Вопросы для повторения Упражнения по программированию Глава 12. Наследование классов Простой базовый класс Наследование — отношение is-a Объявление производного класса Реализация производного класса Инициализация объектов объектами Другие функции-элементы Примечания к программе

304 305 306 306 307 311 313 314 315 315 315 315 316 316 318 318 319 319 319 320 325 326 328 328 329 329 329 330 330 330 332 334 335 338 341 342 343 345 346 347 349 351 352 352 355


Управление доступом — protected Отношение is-a, ссылки и указатели Виртуальные функции-элементы Активизация динамического связывания Зачем нужны два вида связывания? Как работают виртуальные функции Что следует знать о виртуальных функциях Конструкторы Деструкторы Дружественные конструкции Отсутствие переопределения Переопределение скрывает методы Наследование и присваивание Смешанное присваивание Присваивание и динамическое распределение памяти Случай 1. Производный класс не использует оператор new Случай 2. Производный класс использует оператор new Абстрактные базовые классы Обзор структуры класса Функции-элементы, которые генерирует компилятор Заданный по умолчанию конструктор Конструктор копирования Оператор присваивания Другие соображения по поводу методов класса Конструкторы Деструкторы Преобразования Передача объекта по значению и передача по ссылке Возврат объекта и ссылки Использование const Соображения по поводу общедоступного наследования Отношение is-a Какие объекты не наследуются Оператор присваивания Приватные и защищенные элементы Виртуальные методы Деструкторы Итоговый анализ функций класса Резюме Вопросы для повторения Упражнения по программированию Глава 13. Повторное использование программного кода в C++ Классы, включающие элементы объектов Класс ArrayDb Работа с operator[]()

355 356 357 358 360 361 362 362 362 362 362 362 363 364 365 366 367 370 371 371 371 372 372 372 372 372 373 373 373 374 374 374 375 375 376 376 376 377 377 378 378 381 381 382 384


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

384 385 385 388 389 390 390 390 391 392 393 393 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 424 424 424 428 429


Общедоступные дружественные элементы Шаблоны и дружественные элементы Вложенные классы Вложенные классы и доступ Диапазон доступа Управление доступом Вложение в шаблоне Исключения Примечания к программе Механизм исключений Примечания к программе Разносторонность исключений Многочисленные блоки try Разворачивание стека Дополнительные опции Исключения и классы Исключения и наследование Класс exception Исключение bad_alloc и оператор new Проблемы, связанные с исключениями Замечание об исключениях Библиотека RTTI Назначение RTTI Принципы функционирования RTTI Оператор dynamic_cast Оператор typeid и класс type_info Проблемы, возникающие при использовании RTTI Операторы приведения типов Резюме Вопросы для повторения Упражнения по программированию Глава 15. Класс string и стандартная библиотека шаблонов Класс string Создание строки Примечания к программе Реализация ввода в классе string Работа со строками Примечания к программе Что еще? Класс auto_ptr Использование шаблона auto_ptr Некоторые замечания Стандартная библиотека шаблонов Класс шаблонов vector Операции, допустимые при работе с шаблонами vector

431 431 432 433 433 434 434 437 439 439 439 441 442 443 444 445 446 451 453 453 455 456 456 456 457 458 461 462 463 464 464 465 465 465 466 468 469 472 472 472 473 474 475 476 477


Дополнительные операции с векторами Обобщенное программирование Почему именно итераторы? Типы итераторов Итератор ввода Итератор вывода Прямой итератор Двусторонний итератор Итератор произвольного доступа Иерархия итераторов Концепции, уточнения и модели Указатель как итератор Итераторы сору(), ostream_iterator и istream_iterator Другие полезные итераторы Типы контейнеров Концепция контейнера Последовательности Класс vector Класс deque Класс list Примечания к программе Инструментарий для работы с контейнером list Класс queue Класс priority_queue Класс stack Ассоциативные контейнеры Пример класса set Пример класса multimap Функциональные объекты (функторы) Концепции функторов Предопределенные функторы Адаптируемые функторы и функции-адаптеры Алгоритмы Группы алгоритмов Общие свойства Использование STL Другие библиотеки Резюме Вопросы для повторения Упражнения по программированию Глава 16. Ввод/вывод данных и работа с файлами Обзор ввода/вывода данных в C++ Потоки и буферы Потоки, буферы и файл iostream Перенаправление

480 483 483 486 486 486 487 487 487 488 488 489 489 490 492 493 495 496 497 497 498 499 499 499 500 500 500 503 504 505 506 507 508 509 509 510 513 513 514 514 516 516 517 518 520


Вывод с помощью cout Перегруженная операция << Вывод и указатели Конкатенация вывода Другие методы класса ostream Очистка буфера вывода Форматирование вывода с помощью cout Изменение системы счисления при выводе Установка ширины полей Символы-заполнители Установка точности при выводе чисел с плавающей точкой Вывод замыкающих нулей и десятичной точки Подробнее о функции setf() Стандартные манипуляторы Заголовочный файл iomanip Ввод данных с помощью cin Как cin >> рассматривает поток ввода Состояние потока Установка состояния Ввод/вывод и прерывания Эффекты состояния потока Другие методы класса istream Односимвольный ввод Выбор формы односимвольного ввода Строковый ввод: getline(), get() и ignore() Неожиданный строковый Ввод Другие методы класса istream Примечания к программе Ввод/вывод файлов Простой файловый ввод/вывод Открытие нескольких файлов Работа в режиме командной строки Проверка потока и функция is _open() Режимы файлов Добавление к файлу Двоичные файлы Произвольный доступ к файлам Внутреннее форматирование Что дальше? Резюме Вопросы для повторения Упражнения по программированию Приложение А. Системы счисления Восьмеричные числа Шестнадцатиричные числа

520 521 521 522 522 523 524 525 526 527 527 528 528 532 533 534 535 536 536 537 537 538 538 540 540 542 543 544 545 546 548 548 550 550 552 554 557 560 564 564 565 566 568 568 568


Двоичные числа Двоичные и шестнадцатиричные числа Приложение В. Ключевые слова языка C++ Приложение С. Таблица кодов ASCII Приложение D. Приоритет операций Приложение Е. Другие операции Поразрядные операции Операции смещения Логические поразрядные операции Несколько стандартных приемов по работе с битами Установка бита Переключение бита Отмена установленного бита Проверка значения бита Операции разыменования элементов Приложение F. Класс шаблона STRING Тринадцать типов и констант Информация о данных, конструкторах и другие сведения Стандартные конструкторы Конструкторы, использующие массив Конструкторы, использующие часть массива Конструктор копирования Конструктор, использующий п копий символа Конструкторы, использующие диапазон значений Ячейки памяти Доступ к строке Базовые методы присваивания Поиск строковых величин Семейство методов find() Семейство методов rfind() Семейство методов find_first_of() Семейство методов find_last_of() Семейство методов find_first_not_of() Семейство методов find_last_not_of() Функции и методы сравнения Модификаторы строковых значений Конкатенирование и дописывание Дополнительные средства присваивания Методы вставки Методы удаления Методы замены Другие методы изменения: сору() и swap() Вывод и ввод данных Приложение G. Методы и функции библиотеки STL Элементы, общие для всех контейнеров

569 569 570 571 575 578 578 578 579 580 580 580 581 581 581 583 583 584 585 586 586 586 587 587 587 588 588 588 588 589 589 589 589 590 590 591 591 591 591 592 592 592 593 594 594


Дополнительные элементы для векторов,списков и очередей с двухсторонним доступом Дополнительные элементы для наборов и карт Функции STL Неизменяющаяся последовательность операций Изменяющаяся последовательность операций Операции сортировки и связывания Сортировка Двоичный поиск Слияние Операции над наборами Операции над кучей Минимум и максимум Перестановки Операции с числами Приложение Н. Рекомендуемая литература Стандарт ISO/ANSI Приложение I. Преобразование программного кода в соответствии со стандартом ANSI/ISO C++ Директивы препроцессора При объявлении констант лучше использовать const вместо #define Для определения небольших функций используйте ключевое слово inline вместо #define Используйте прототипы функций Приведение типов Познакомьтесь со свойствами языка C++ Используйте новую структуру заголовочных файлов Использование пространств имен Использование шаблона autoptr Использование класса string Использование STL Приложение J. Ответы на вопросы для повторения Предметный указатель Предметный указатель Алгоритм 508 Аргумент 34, 44 заданный по умолчанию 207 Арифметические операции 70 Ассоциативность 71 Б Байт 54 А Библиотека 27 Абстрагирование 246 RTTI 456 Автоматическая память 225 STL 594 Символы * 96 ++ 122 -- 122 << 37, 521 = 41 || 148

595 596 597 598 601 606 606 608 609 609 611 611 612 613 615 616 617 617 617 618 619 619 619 619 619 620 620 621 622 634


символьных функций cctype 153 Бит 54 Буфер 517 В Ввод 87 смешанный строчно-числовой 87 данных 534 текста 134 Ввод/вывод 516, 545, 593 перенаправление 520 Вектор 286, 476 Виртуальные методы 376 Виртуальный базовый класс 411 Вывод данных 37 Выражение 70, 126 сравнения 126 Д Двоичный поиск 608 Деструктор 255, 264, 362, 372 Диапазон доступа класса 224, 250, 267 Динамическая память 306 Динамическое распределение памяти 236, 365 Динамическое связывание 358 Директива Using 37, 238 Дружественные элементы 431 З Значащие цифры 67 И Имена в C++ 236 Индекс 80 Инициализация 55 Инкапсуляция 249 Интегрированная среда разработки (IDE) 27, 29 Исключения 437 Bad_alloc 453 непредвиденное 453 Исходный код 26 Итератор 486 сору() 489 istream_iterator 489 ostreamjterator 489 ввода 486 вывода 486

двусторонний 487 другие 490 произвольного доступа 487 прямой 487 К Квалификатор 65 const 65 Класс Allocator 472 Auto_ptr 472 Customer 335 Deque 497 Ellipse 370 Exception 451 Istream 43 Ust 497 Multimap 503 Ostream 43, 521, 525 Priority_queue 499 Push_back() 496 Push_front() 496 Queue 330, 499 Stack 500 Stock 258 String 307, 320, 465, 583 конструкторы 466 Vector 26, 476, 496 абстрактный базовый 370 базовый 346 виртуальный базовый 411 включающий элементы объектов 381 вложенный 332, 432 диапазон доступа 433 дружественный 424 наследование 345 производный 346 шаблоны классов 394 Классы памяти 227, 235 статические 228 Ключевые слова языка C++ 48, 570 Командная строка 548 Комментарий 35 Компилятор 22 Компиляция 28, 221


раздельная 221 Компоновка 28 Компьютер 40 Конкатенация строк 83 Константы 56, 59, 62 с плавающей точкой 69 символические 56 символьные 62 целочисленные 59 Конструктор 255, 262, 362, 372, 585 копирования 315, 372, 586 стандартный 585 строковый 585 Контейнер 492, 493, 500 ассоциативный 500 Куча 611 Л Лексема 39 Логические выражения 148 Логические операции 145 М Малые целые числа 60 Массив 59, 79, 103, 140, 172 Двумерный 140 Динамический 101 Имя массива 106 Индекс 80 Метод Begin() 485 Сору() 592 End() 485 Erase() 478, 592 Find() 588 Find_first_not_of() 589 Find_first_of() 589 Find_last_not_of() 590 Find_last_of() 589 Get(char &) 541 Get(void) 541 Insert() 591 Read() 555 Replace() 592 Rfind() 589 Swap() 592 Width() 526

Write() 555 виртуальный 376 включения 381 встроенный 252 приватного и защищенного наследования 381 сравнения 590 Множественное наследование 409 Моделирование 338 Модификатор 230, 591 static 230 const 203 Н Наследование 363, 390, 446 приватное 390 Нехватка памяти 100 О Область имен 36, 37 Обобщенное программирование 483 Объединение 92 анонимное 93 Объест 23, 37, 245, 520 cin 42, 534 cout 37, 520 Объектно-ориентированное программирование 249 Операнд 70 Оператор 34, 40, 55, 62, 99, 122, 145, 453 ?: 154 break 158 continue 158 if 145 if else 146 If else if else 147 new 99, 101, 325, 453 switch 155 декремента (--) 122 "запятая" 124 инкремента (++) 122 комбинированные операторы присваивания 123 объявления 40 приведения типов 462 принадлежности 62


присваивания 41, 375 составной 123 Операция 55, 70, 96, 145, 148, 521 * (косвенное значение) 96 << 521 арифметическая 70 деления 71 логическая 145 И (&&) 149 ИЛИ (||) 148 НЕ(!) 151 приоритет операций 71 над наборами 609 Операционная система 22 Освобождение памяти 100 Отношение 347, 374, 381 has-a ("содержит объект") 348, 381 is-a ("является объектом") 347, 374, 382 uses-a 348 Очередь 329 П Память 95, 99, 111, 225, 236, 306 автоматическая 111, 225 динамическая 236, 306 нехватка памяти 100 освобождение памяти 100 распределение 99 свободная 95, 111 статическая 111 Параметр 34, 44 Перегрузка 209 операции 38, 275 << 282, 328 Переменная 40, 52, 112, 198 Boolean 65 автоматическая 112 внешняя 228, 232 временная 203 глобальная 230 именование 53 локальная 230 простая 52 ссылочная 198

типа register 227 Переносимость 25 Перестановки 612 Перечисления 93 Подпрограмма 47 Поиск двоичный 608 Полиморфизм 209 Последовательность 495 Поток 517 Преобразование типов данных 73 Препроцессор C++ 36 Приватное наследование 390 Приведение типов 75 Приоритет операций 71, 575 Присваивание 363 смешанное 364 Профаммирование 21, 245, 483 обобщенное 24, 483 объектно-ориентированное 21, 23, 245,249 процедурное 21, 23, 245 сверху вниз 23 снизу вверх 24 структурное 23 Произвольный доступ к файлам 557 Пространство имен 236 Прототип 167 Процедура 47 Псевдоним типа 133 Р Раздельная компиляция 221 Разрядные поля 92 Распределение памяти динамическое 236, 365 Расширение типов 558 Рекурсия 188 С Свободная память 95 Связывание 101, 227, 231, 235, 358 динамическое 101, 105, 358 статическое 101, 105, 357 языковое 235 Сигнатура 210 Символ


-заполнитель 527 новой строки (\n) 38 сигнальной метки 134 Символические константы 56 Система счисления 568 восьмеричная 568 двоичная 569 шестнадцатиричная 568 Слияние 609 Сокрытие данных 249 Сортировка 481, 606 Специализация 215, 218, 396, 408 явная 215 Спецификатор const 179 Спецификаторы классов памяти 233 Сравнение строк 128 Среда разработки 27 Ссылка 200, 356 Стандарт 25 ANSI 31 ISO/ANSI 616 Стандартная библиотека шаблонов (STL) 465, 475 Стандартные конструкторы 585 Статический класс памяти 228 Статическое связывание 357 Стек 270, 443 Стоун 49 Строка 37, 82 конкатенация строк 83 Структура 88, 183, 250, 332 вложенная 332 динамическая 109 дружественная 280 Т Таблица 361 Таблица кодов ASCII 571 Тип данных 54, 247, 268 Boolean 65 абстрактный 268 без знака (unsigned) 57 основной (char, short, int и long) 54 преобразование типов данных 73

с плавающей точкой (float, double и long double) 67 символьный (char) 62 целочисленный (short, int и long) 54 У Указатель 95, 98, 103, 106, 173, 326,356,521 this 263 j арифметика указателей 105 на функции 189 > объявление указателей 105 присвоение значений указателям 105 разыменование указателей 105 Управление доступом 355 Управляющие последовательности языка C++ 63 Ф Файл 36, 518 iomanip 533 iostream 36, 518 Флаг 528 Форматирование 560 внутреннее 560 Функции 428 дружественные 428 Функции-адаптеры 507 Функциональные объекты (функторы) 504 адаптируемые 507 предопределенные 506 Функция Accumulate() 613 Adjacent_difference() 614 Adjacent_find() 600 Binary_search() 609 Cin.get() 540 Cin.get(ch) 540 Cin.get(char) 135 Copy() 489, 601 Copy_backward() 601 Count if() 600 Count() 600 Cout.put() 62


Equal() 600 Equal_range() 609 Exit() 252 Fill() 604 Fill_n() 604 Find() 480, 599 Find_ar() 485 Find_end() 599 Find_first_of() 600 Find_if() 599 Find_ll() 485 For_each() 599 Gcount() 543 Generator() 604 Generator_n() 604 Get() 540 Get(char *, int, char) 541 Getline() 85, 540 Getline(char *, int, char) 542 Ignore() 540 Includes() 610 Inner_product() 614 Inplace_merge() 609 Is_open() 550, 552 Isspace() 538 Iter_swap() 603 Lexicographical_compare() 612 Lower_bound() 608 Main() 33 Makeheap() 611 Max() 612 Max_element() 612 Merge() 609 Min() 612 Min_etement() 612 Next_permutation() 613 Nth_element() 608 Operator>() 320 Partial_sort() 608 Partial_sort_copy() 608 Partial_sum() 614 Partition() 605 Peek() 543 Pop_heap() 611 Pow() 46

Precision() 527 Previous_permutation() 613 Printf() 42 Push_heap{) 611 Putbackf) 543 Random_shuffle() 605 Read() 543 Remove() 604 Remove_copy() 604 Remove_copyjf() 604 Remove_if() 604 Replace()_if 603 Replace_copy() 603 Replace_copy_if() 603 Reverse_copy() 605 Reversed 605 Rotated 605 Rotate_copy() 605 Search() 601 Search_n() 601 Seekg() 558 Set_difference() 610 Set_intersection() 610 Set_symmetric_difference() 611 Set_union() 610 Setf() 528 Sort() 480, 606 Sqrt() 45 Stable_partition() 606 Stable_sort() 608 Strcmp() 320 Swap() 603 Swap_ranges() 603 Transform() 603 Unique() 605 Unique copy() 605 Upper_bound() 608 WorseThan() 481 аргументы 169 встроенная 196 вызов 166 обзор 164 определяемая пользователем 47 прототипирование 166 со многими аргументами 221


сравнения 590 Функция-элемент 62, 250, 309, 357 виртуальная 357, 362, 371 неявная 315 свойства 377 статическая 309 Ц Целочисленная константа 59 Целые числа 54, 60 Цикл 115 Do while 135 For 115 While 129 вложенный 140 шаг цикла 117 Цифры значащие 67 Ч Числа 54, 100 с плавающей точкой 66 целые 54 Ш Шаблон 212, 412, 431 класса 394, 412

перегруженный 214 Э Экземпляр 396 шаблона 218 Элемент статических данных 308 статического класса 307 дружественный 431 Я Язык 22 Ассемблер 22 машинный 26 С 22 C++ 24 Иностранные термины ADT - abstract data types 271 ANSI 31 FIFO 329 IDE 29 UFO 270, 329 RTTI 456 STL - Standard Template Library 465, 594









































































































































































































































































































































Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.