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

Обновленное издание под стандарт C++ 11.

Стенли Б. Липпман, Жози Лажойе, Барбара Э. Му. «Язык программирования C++. Базовый курс» Вильямс, 2014 год, 1120 стр., 5-е издание, ISBN 978-5-8459-1839-0; (50,5 мб. djvu)

Издание полностью пересмотрено так, чтобы использовать стандарт языка C++11. Представленное руководство определено , как базовый курс и может быть использовано начинающими изучать C++, программистами. Рассмотрены: низкоуровневый язык, что унаследовано от C, стандартная библиотека, дополнительные возможности языка.

В разделе «Новые средства C++11» — после оглавления, вы можете получить сведения о том, что в нем появилось нового. Перечислены только те разделы, в которых рассматривается новый материал. Такие новшества как интеллектуальные указатели и контейнеры с поддержкой перемещения, позволяют писать более сложные классы без необходимости справляться со сложностями управления ресурсами.

В результате стало возможным изучение создания собственных классов намного раньше, чем в предыдущем издании. С полным курсом можно ознакомиться, просмотрев оглавление книги. Все практические примеры этой книги были откомпилированы на текущем выпуске компилятора GNU.

Оглавление книги

Содержание

Глава 1. Первые шаги
1.1. Создание простой программы на языке C++
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. Символьные строки в стиле С
3.5.5. Взаимодействие с устаревшим кодом
3.6. Многомерные массивы
Резюме
Термины

Глава 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.1. Оператор if
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. Библиотека C++

Глава 8. Библиотека ввода и вывода
8.1. Классы ввода-вывода
8.1.1. Объекты ввода-вывода не допускают
копирования и присвоения
8.1.2. Флаги состояния
8.1.3. Управление буфером вывода
8.2. Ввод и вывод в файл
8.2.1. Использование объектов файловых потоков
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.7. Операторы сравнения
9.3. Операции с последовательными контейнерами
9.3.1. Добавление элементов в последовательный контейнер
9.3.2. Доступ к элементам
9.3.3. Удаление элементов
9.3.4. Специализированные функции контейнера f orward 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. Класс weakptr
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. Использование спецификатора = default
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. Оператор type_id
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. Процессоры случайных чисел
Предметный указатель

Скачать техническую литературу бесплатно50,5 мб. djvu

Похожая литература