Язык программирования С++: базовый курс

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Книга "Язык программирования C++. Базовый курс" — новое издание популярного и исчерпывающего бестселлера по языку программирования C++, которое было полностью пересмотрено и обновлено под стандарт C++11. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. С самого начала книги Книга «Язык программирования C++. Базовый курс» читатель знакомится со стандартной библиотекой C++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Книга Книга «Язык программирования C++. Базовый курс» — не только проверенное руководство для новичков в C++, она содержит также авторитетное обсуждение базовых концепций и методик языка C++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях C++11.

Author(s): Стенли Б. Липпман, Жози Лажойе, Барбара Му
Edition: 5
Publisher: Вильямс
Year: 2014

Language: Russian
Pages: 1118
City: Москва

Содержание
Введение
Для кого написана эта книга
Изменения в пятом издании
Структура книги
Соглашения, принятые в книге
Примечание о компиляторах
Благодарности
От издательства
Глава 1. Первые шаги
1.1. Создание простой программы на языке С++
1.1.1. Компиляция и запуск программы
1.2. Первый взгляд на ввод-вывод
1.3. Несколько слов о комментариях
1.4. Средства управления
1.4.1. Оператор while
1.4.2. Оператор for
1.4.3. Ввод неизвестного количества данных
1.4.4. Оператор if
1.5. Введение в классы
1.5.1. Класс Sales_item
1.5.2. Первый взгляд на функции-члены
1.6. Программа для книжного магазина
Резюме
Термины
Часть I. Основы
Глава 2. Переменные и базовые типы
2.1. Простые встроенные типы
2.1.1. Арифметические типы
2.1.2. Преобразование типов
2.1.3. Литералы
2.2. Переменные
2.2.1. Опредедения переменных
2.2.2. Объявдения и определения переменных
2.2.3. Идентификаторы
2.2.4. Обдасть видимости имен
2.3. Составные типы
2.3.1. Ссылки
2.3.2. Указатели
2.3.3. Понятие описаний составных типов
2.4. Спецификатор const
2.4.1. Ссылка на константу
2.4.2. Указатели и спецификатор const
2.4.3. Спецификатор const верхнего уровня
2.4.4. Переменные constexpr и константные выражения
2.5. Работа с типами
2.5.1. Псевдонимы типов
2.5.2. Спецификатор типа auto
2.5.3. Спецификатор типа decltype
2.6. Определение собственных структур данных
2.6.1. Определение типа Sales_data
2.6.2. Использование класса Sales_data
2.6.3. Создание собственных файлов заголовка
Резюме
Термины
Глава 3. Типы string, vector и массивы
3.1. Пространства имен и объявления using
3.2. Библиотечный тип string
3.2.1. Определение и инициализация строк
3.2.2. Операции со строками
3.2.3. Работа с символами строки
3.3. Библиотечный тип vector
3.3.1. Определение и инициализация векторов
3.3.2. Добавление элементов в вектор
3.3.3. Другие операции с векторами
3.4. Знакомство с итераторами
3.4.1. Использование итераторов
3.4.2. Арифметические действия с итераторами
3.5. Массивы
3.5.1. Определение и инициализация встроенных массивов
3.5.2. Доступ к элементам массива
3.5.3. Указатели и массивы
3.5.4. Символьные строки в стиле C
3.5.5. Взаимодействие с устаревшим кодом
Резюме
Термины
Глава 4. Выражения
4.1. Основы
4.1.1. Фундаментальные концепции
4.1.2. Приоритет и порядок
4.1.3. Порядок вычисления
4.2. Арифметические операторы
4.3. Логические операторы и операторы отношения
4.4. Операторы присвоения
4.5. Операторы инкремента и декремента
4.6. Операторы доступа к членам
4.7. Условный оператор
4.8. Побитовые операторы
4.9. Оператор sizeof
4.10. Оператор запятая
4.11. Преобразование типов
4.11.1. Арифметические преобразования
4.11.2. Другие неявные преобразования
4.11.3. Явные преобразования
4.12. Таблица приоритетов операторов
Резюме
Термины
Глава 5. Операторы
5.1. Простые операторы
5.2. Операторная область видимости
5.3. Условные операторы
5.3.2. Оператор switch
5.4. Итерационные операторы
5.4.1. Оператор while
5.4.2. Традиционный оператор for
5.4.3. Серийный оператор for
5.4.4. Оператор do while
5.5. Операторы перехода
5.5.1. Оператор break
5.5.2. Оператор continue
5.5.3. Оператор goto
5.6. Блоки try и обработка исключений
5.6.1. Оператор throw
5.6.2. Блок try
5.6.3. Стандартные исключения
Резюме
Термины
Глава 6. Функции
6.1. Основы функций
6.1.1. Локальные объекты
6.1.2. Объявление функций
6.1.3. Раздельная компиляция
6.2. Передача аргументов
6.2.1. Передача аргумента по значению
6.2.2. Передача аргумента по ссылке
6.2.3. Константные параметры и аргументы
6.2.4. Параметры в виде массива
6.2.5. Функция main(): обработка параметров командной строки
6.2.6. Функции с переменным количеством параметров
6.3. Типы возвращаемого значения и оператор return
6.3.1. Функции без возвращаемого значения
6.3.2. Функции, возвращающие значение
6.3.3. Возвращение указателя на массив
6.4. Перегруженные функции
6.4.1. Перегрузка и область видимости
6.5. Специальные средства
6.5.1. Аргументы по умолчанию
6.5.2. Встраиваемые функции и функции constexpr
6.5.3. Помощь в отладке
6.6. Подбор функции
6.6.1. Преобразование типов аргументов
6.7. Указатели на функции
Резюме
Термины
Глава 7. Классы
7 .1. Определение абстрактных типов данных
7.1.1. Разработка класса Sales_data
7.1.2. Определение пересмотренного класса Sales_data
7.1.3. Определение функций, не являющихся членом класса, но связанных с ним
7.1.4. Конструкторы
7.1.5. Копирование, присвоение и удаление
7.2. Управление доступом и инкапсуляция
7.2.1. Друзья
7.3. Дополнительные средства класса
7.3.1. Снова о членах класса
7.3.2. Функции, возвращающие указатель *this
7.3.3. Типы классов
7.3.4. Снова о дружественных отношениях
7.4. Область видимости класса
7.4.1. Поиск имен в области видимости класса
7.5. Снова о конструкторах
7.5.1. Список инициализации конструктора
7.5.2. Делегирующий конструктор
7.5.3. Роль стандартного конструктора
7.5.4. Неявное преобразование типов класса
7.5.5. Агрегатные классы
7.5.6. Литеральные классы
7.6. Статические члены класса
Резюме
Термины
Часть II. Библиотека С++
Глава 8. Библиотека ввода и вывода
8.1. Классы ввода-вывода
8.1.1. Объекты ввoдa-выoдa не допускают копирования и присвоения
8.1.2. Флаrи состояния
8.1.3. Управление буфером вывода
8.2. Ввод и вывод в файл
8.2.1. Использование объектов файловыx потоков
8.2.2. Режимы файла
8.3. Строковые потоки
8.3.1. Использование класса istringstream
8.3.2. Использование класса ostringstream
Резюме
Термины
Глава 9. Последовательные контейнеры
9.1. Обзор последовательных контейнеров
9.2. Обзор библиотечных контейнеров
9.2.1. Итераторы
9.2.2. Типы-члены классов контейнеров
9.2.3. Функции-члены begin() и end()
9.2.4. Определение и инициализация контейнера
9.2.5. Присвоение и функция swap()
9.2.6. Операции с размером контейнера
9.2.7. Операторы сравнения
9.3. Операции с последовательными контейнерами
9.3.1. Добавление элементов в последовательный контейнер
9.3.2. Доступ к элементам
9.3.3. Удаление элементов
9.3.4. Специализированные функции контейнера forward_list
9.3.5. Изменение размеров контейнера
9.3.6. Некоторые операции с контейнерами делают итераторы недопустимыми
9.4. Как увеличивается размер вектора
9.5. Дополнительные операции со строками
9.5.1. Дополнительные способы создания строк
9.5.2. Другие способы изменения строки
9.5.3. Операции поиска строк
9.5.4. Сравнение строк
9.5.5. Числовые преобразования
9.6. Адаптеры контейнеров
Резюме
Термины
Глава 10. Обобщенные алгоритмы
10.1. Краткий обзор
10.2. Первый взгляд на алгоритмы
10.2.1. Алгоритмы только для чтения
10.2.2. Алгоритмы, записывающие элементы контейнера
10.2.3. Алгоритмы, переупорядочивающие элементы контейнера
10.3. Перенастройка функций
10.3.1. Передача функций алгоритму
10.3.2. Лямбда-выражения
10.3.3. Захват и возвращение значений лямбда-выражениями
10.3.4. Привязка аргументов
10.4. Возвращаясь к итераторам
10.4.1. Итераторы вставки
10.4.2. Потоковые итераторы
10.4.3. Реверсивные итераторы
10.5. Структура обобщенных алгоритмов
10.5.1. Пять категорий итераторов
10.5.2. Параметрическая схема алгоритмов
10.5.3. Соглашения об именовании алгоритмов
10.6. Алгоритмы, специфические для контейнеров
Резюме
Термины
Глава 11. Ассоциативные контейнеры
11.1. Использование ассоциативных контейнеров
11.2. Обзор ассоциативных контейнеров
11.2.1. Определение ассоциативного контейнера
11.2.2. Требования к типу ключа
11.2.3. Тип pair
11.3. Работа с ассоциативными контейнерами
11.3.1. Итераторы ассоциативных контейнеров
11.3.2. Добавление элементов
11.3.3. Удаление элементов
11.3.4. Индексация карт
11.3.5. Доступ к элементам
11.3.6. Карта преобразования слов
11.4. Неупорядоченные контейнеры
Использование неупорядоченного контейнера
Управление ячейками
Требования к типу ключа неупорядоченных контейнеров
Резюме
Термины
Глава 12. Динамичская память
12.1. Динамическая память и интеллектуальные указатели
12.1.1. Класс shared_ptr
12.1.2. Непосредственное управление памятью
12.1.3. Использование указателя shared_ptr с оператором new
12.1.4. Интеллектуальные указатели и исключения
12.1.5. Класс unique_ptr
12.1.6. Класс weak_ptr
12.2. Динамические массивы
12.2.1. Оператор new и массивы
12.2.2. Класс allocator
12.3. Использование библиотеки: программа запроса текста
12.3.1. Проект программы
12.3.2. Определение классов программы запросов
Резюме
Термины
Часть III. Инструменты для разработчиков классов
Глава 13. Управление копированием
13.1. Копирование, присвоение и удаление
13.1.1. Конструктор копий
13.1.2. Оператор присвоения копии
13.1.3. Деструктор
13.1.4. Правило три/пять
13.1.5. Использование спецификатора = defаult
13.1.6. Предотвращение копирования
13.2. Управление копированием и ресурсами
13.2.1. Классы, действующие как значения
13.2.2. Определение классов, действующих как указатели
13.3. Функция swap()
13.4. Пример управления копированием
13.5. Классы, управляющие динамической памятью
13.6. Перемещение объектов
13.6.1. Ссылки на r-значение
13.6.2. Конструктор перемещения и присваивание при перемещении
13.6.3. Ссылки на r-значение и функции-члены
Резюме
Термины
Глава 14. Перегрузка операторов и преобразований
14.1. Фундаментальные концепции
14.2. Операторы ввода и вывода
14.2.1. Перегрузка оператора вывода <<
14.2.2. Перегрузка оператора ввода >>
14.3. Арифметические операторы и операторы отношения
14.3.1. Операторы равенства
14.3.2. Операторы отношения
14.4. Операторы присвоения
14.5. Оператор индексирования
14.6. Операторы инкремента и декремента
14.7. Операторы доступа к членам
14.8. Оператор вызова функции
14.8.1. Лямбда-выражения - объекты функции
14.8.2. Библиотечные объекты функций
14.8.3. Вызываемые объекты и тип function
14.9. Перегрузка, преобразование и операторы
14.9.1. Операторы преобразования
14.9.2. Избегайте неоднозначных преобразований
14.9.3. Подбор функций и перегруженные операторы
Резюме
Термины
Глава 15. Объектно-ориентированное программирование
15.1. Краткий обзор ООП
15.2. Определение базовых и производных классов
15.2.1. Определение базового класса
15.2.2. Определение производного класса
15.2.3. Преобразования и наследование
15.3. Виртуальные функции
15.4. Абстрактные базовые классы
15.5. Управление доступом и наследование
15.6. Область видимости класса при наследовании
15.7. Конструкторы и функции управления копированием
15.7.1. Виртуальные деструкторы
15.7.2. Синтезируемые функции управления копированием и наследование
15.7.3. Функции-члены управления копированием производного класса
15.7.4. Унаследованные конструкторы
15.8. Контейнеры и наследование
15.8.1. Разработка класса Basket
15.9. Возвращаясь к запросам текста
15.9.1. Объектно-ориентированное решение
15.9.2. Классы Query_base и Query
15.9.3. Производные классы
15.9.4. Виртуальные функции eval()
Резюме
Термины
Глава 16. Шаблоны и обобщенное программирование
16.1. Определение шаблона
16.1.1. Шаблоны функций
16.1.2. Шаблоны класса
16.1.3. Параметры шаблона
16.1.4. Шаблоны-члены
16.1.5. Контроль создания экземпляра
16.1.6. Эффективность и гибкость
16.2. Дедукция аргумента шаблона
16.2.1. Преобразования и параметры типа шаблона
16.2.2. Явные аргументы шаблона функции
16.2.3. Замыкающие типы возвращаемого значения и трансформация типа
16.2.4. Указатели на функцию и дедукция аргумента
16.2.5. Дедукция аргумента шаблона и ссылки
16.2.6. Функция std::move()
16.2.7. Перенаправление
16.3. Перегрузка и шаблоны
16.4. Шаблоны с переменным количеством аргументов
16.4.1. Шаблоны функции с переменным количеством аргументов
16.4.2. Развертывание пакета
16.4.3. Перенаправление пакетов параметров
16.5. Специализация шаблона
Резюме
Термины
Часть IV. Дополнительные темы
Глава 17. Специализированные средства библиотек
17.1. Тип tuple
17.1.1. Определение и инициализация кортежей
17.1.2. Использование кортежей для возвращения нескольких значений
17.2. Тип bitset
17.2.1. Определение и инициализация наборов битов
17.2.2. Операции с наборами битов
17.3. Регулярные выражения
17.3.1. Использование библиотеки регулярных выражений
17.3.2. Типы итераторов классов соответствия и regex
17.3.3. Использование подвыражений
17.3.4. Использование функции regex_replace()
17.4. Случайные числа
17.4.1. Процессоры случайных чисел и распределения
17.4.2. Другие виды распределений
17.5. Еще о библиотеке ввода и вывода
17.5.1. Форматированный ввод и вывод
17.5.2. Не форматированные операции ввода-вывода
17.5.3. Произвольный доступ к потоку
Резюме
Термины
Глава 18. Инструменты для крупномасштабных программ
18.1. Обработка исключений
18.1.1. Передача исключений
18.1.2. Обработка исключения
18.1.3. Блок try функции и конструкторы
18.1.4. Спецификатор исключения noexcept
18.1.5. Иерархии классов исключений
18.2. Пространства имен
18.2.1. Определение пространств имен
18.2.2. Использование членов пространства имен
18.2.3. Классы, пространства имен и области видимости
18.2.4. Перегрузка и пространства имен
18.3. Множественное и виртуальное наследование
18.3.1. Множественное наследование
18.3.2. Преобразования и несколько базовых классов
18.3.3. Область видимости класса при множественном наследовании
18.3.4. Виртуальное наследование
18.3.5. Конструкторы и виртуальное наследование
Резюме
Термины
Глава 19. Специализированные инструменты и технологии
19.1. Контроль распределения памяти
19.1.1. Перегрузка операторов new и delete
19.1.2. Размещающий оператор new
19.2. Идентификация типов времени выполнения
19.2.1. Оператор dynamic_cast
19.2.2. Оператор typeid
19.2.3. Использование RTTI
19.2.4. Класс type_info
19.3. Перечисления
19.4. Указатель на член класса
19.4.1. Указатели на переменные-члены
19.4.2. Указатели на функции-члены
19.4.3. Использование функций-членов как вызываемых объектов
19.5. Вложенные классы
19.6. Класс объединения, экономящий место
19.7. Локальные классы
19.8. Возможности, снижающие переносимость
19.8.1. Битовые поля
19.8.2. Спецификатор volatile
19.8.3. Директивы компоновки: extern "С"
Резюме
Термины
Приложение А. Библиотека
А.1. Имена и заголовки стандартной библиотеки
А.2. Краткий обзор алгоритмов
А.2.1. Алгоритмы поиска объекта
А.2.2. Другие алгоритмы, осуществляющие только чтение
А.2.3. Алгоритмы бинарного поиска
А.2.4. Алгоритмы записи в элементы контейнера
А.2.5. Алгоритмы сортировки и разделения
А.2.6. Общие функции изменения порядка
А.2.7. Алгоритмы перестановки
А.2.8. Алгоритмы набора для отсортированных последовательностей
А.2.9. Минимальные и максимальные значения
А.2.10. Числовые алгоритмы
А.3. Случайные числа
А.3.1. Распределение случайных чисел
А.3.2. Процессоры случайных чисел
Предметный указатель