Николай Прохоренок. Основы C++

Если вы хотите научиться программировать на языках C или C++, то эта книга для вас. В книге описан базовый синтаксис современного языка C++: типы данных, операторы, условия, циклы, работа с числами, строками, массивами и указателями, создание пользовательских функций, модулей, статических и динамических библиотек. Рассмотрены основные функции стандартной библиотеки языка C++, а также функции, применяемые только в операционной системе Windows. Для написания, компиляции и запуска программ используется редактор Eclipse, а для создания исполняемого файла — компилятор g++.exe версии 8.2, входящий в состав популярной библиотеки MinGW-W64.

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

Оглавление книги Основы C++

Глава 1. Установка программ под Windows

1.1. Создание структуры каталогов
1.2. Добавление пути в переменную PATH
1.3. Работа с командной строкой
1.4. Установка MinGW и MSYS
1.5. Установка MinGW-W64
1.6. Установка MSYS2 и MinGW-W64
1.7. Установка и настройка редактора Eclipse
1.8. Создание проектов в редакторе Eclipse

Глава 2. Первые шаги

2.1. Первая программа
2.2. Создание пустого проекта в редакторе Eclipse
2.3. Добавление в проект файла с программой
2.4. Добавление в проект заголовочного файла
2.5. Компиляция и запуск программы в редакторе Eclipse
2.6. Структура программы
2.7. Комментарии в программе
2.8. Вывод данных в языке C++
2.9. Вывод данных в языке C
2.10. Ввод данных в языке C++
    2.10.1. Ввод числа
    2.10.2. Ввод символа
    2.10.3. Ввод строки
2.11. Ввод данных в языке C
2.12. Интерактивный ввод символов
2.13. Получение данных из командной строки
2.14. Предотвращение закрытия окна консоли
2.15. Настройка отображения русских букв в консоли
2.16. Преждевременное завершение выполнения программы

Глава 3. Переменные и типы данных

3.1. Объявление переменной
3.2. Именование переменных
3.3. Типы данных
3.4. Целочисленные типы фиксированного размера
3.5. Ключевое слово auto
3.6. Инструкция decltype
3.7. Оператор sizeof и тип size_t
3.8. Инициализация переменных
3.9. Оператор typedef
3.10. Динамическое определение типа данных
3.11. Константы
3.12. Спецификаторы хранения
3.13. Области видимости переменных
3.14. Пространства имен
3.15. Массивы
3.16. Строки
3.17. Указатели
3.18. Ссылки
3.19. Динамическое выделение памяти в языке C++
    3.19.1. Выделение памяти под один объект
    3.19.2. Выделение памяти под массив
    3.19.3. Выделение памяти без возбуждения исключения
3.20. Динамическое выделение памяти в языке C
    3.20.1. Функции malloc() и free()
    3.20.2. Функция calloc()
    3.20.3. Функция realloc()
3.21. Структуры
3.22. Битовые поля
3.23. Объединения
3.24. Перечисления
3.25. Приведение типов

Глава 4. Операторы и циклы

4.1. Математические операторы
4.2. Побитовые операторы
4.3. Операторы присваивания
4.4. Оператор запятая
4.5. Операторы сравнения
4.6. Приоритет выполнения операторов
4.7. Оператор ветвления if
4.8. Оператор ?:
4.9. Оператор выбора switch
4.10. Циклы for и for each
    4.10.1. Цикл for
    4.10.2. Цикл for each
4.11. Цикл while
4.12. Цикл do…while
4.13. Оператор continue: переход на следующую итерацию цикла
4.14. Оператор break: прерывание цикла
4.15. Оператор goto

Глава 5. Числа

5.1. Математические константы
5.2. Основные функции для работы с числами
5.3. Округление чисел
5.4. Тригонометрические функции
5.5. Преобразование строки в число
5.6. Преобразование числа в строку
5.7. Генерация псевдослучайных чисел
5.8. Бесконечность и значение NAN

Глава 6. Массивы

6.1. Объявление и инициализация массива
6.2. Определение количества элементов и размера массива
6.3. Получение и изменение значения элемента массива
6.4. Перебор элементов массива
6.5. Доступ к элементам массива с помощью указателя
6.6. Массивы указателей
6.7. Динамические массивы
6.8. Многомерные массивы
6.9. Поиск минимального и максимального значений
6.10. Сортировка массива
6.11. Проверка наличия значения в массиве
6.12. Копирование элементов из одного массива в другой
6.13. Сравнение массивов
6.14. Переворачивание массива
6.15. Списки инициализации

Глава 7. Символы и C-строки

7.1. Объявление и инициализация отдельного символа
7.2. Настройка локали
    7.2.1. Настройка локали в языке C
    7.2.2. Настройка локали в языке C++
7.3. Изменение регистра символов
7.4. Проверка типа содержимого символа
7.5. Объявление и инициализация C-строки
7.6. Доступ к символам внутри C-строки
7.7. Определение длины строки
7.8. Перебор символов C-строки
7.9. Основные функции для работы с C-строками
7.10. Поиск и замена в C-строке
7.11. Сравнение С-строк
7.12. Форматирование С-строк

Глава 8. Широкие символы и L-строки

8.1. Объявление и инициализация широкого символа
8.2. Вывод и ввод широких символов
8.3. Изменение регистра символов
8.4. Проверка типа содержимого широкого символа
8.5. Преобразование широких символов в обычные и наоборот
8.6. Объявление и инициализация L-строки
8.7. Доступ к символам внутри L-строки
8.8. Определение длины L-строки
8.9. Перебор символов L-строки
8.10. Вывод и ввод L-строк
8.11. Преобразование C-строки в L-строку и наоборот
8.12. Преобразование кодировок
8.13. Основные функции для работы с L-строками
8.14. Поиск и замена в L-строке
8.15. Сравнение L-строк
8.16. Преобразование L-строки в число
8.17. Преобразование числа в L-строку
8.18. Типы char16_t и char32_t

Глава 9. Классы string и wstring

9.1. Объявление и инициализация строки
9.2. Ввод и вывод строки
9.3. Преобразование объекта в C-строку или в массив символов
9.4. Получение и изменение размера строки
9.5. Доступ к отдельным символам
9.6. Перебор символов строки
9.7. Итераторы
9.8. Конкатенация строк
9.9. Добавление и вставка символов
9.10. Удаление символов
9.11. Получение фрагмента строки
9.12. Поиск в строке
9.13. Замена в строке
9.14. Сравнение строк
9.15. Преобразование строки в число
9.16. Преобразование числа в строку
9.17. Классы u16string и u32string
9.18. Преобразование кодировок и типов

Глава 10. Регулярные выражения

10.1. Создание шаблона регулярного выражения
10.2. Синтаксис регулярных выражений
    10.2.1. Экранирование специальных символов
    10.2.2. Метасимволы
    10.2.3. Стандартные классы
    10.2.4. Квантификаторы
    10.2.5. Жадность квантификаторов
    10.2.6. Группы
    10.2.7. Обратные ссылки
    10.2.8. Просмотр вперед
10.3. Функция regex_match(): проверка полного соответствия шаблону
10.4. Функция regex_search(): поиск соответствия шаблону
10.5. Класс match_results: результаты поиска
10.6. Поиск всех совпадений с шаблоном
10.7. Функция regex_replace(): замена в строке
10.8. Разделение строки на фрагменты по шаблону

Глава 11. Работа с датой и временем

11.1. Получение текущей даты и времени
11.2. Форматирование даты и времени
11.3. Засыпание программы
11.4. Измерение времени выполнения фрагментов кода

Глава 12. Пользовательские функции

12.1. Создание функции и ее вызов
12.2. Расположение объявлений и определений функций
12.3. Способы передачи параметров в функцию
12.4. Передача массивов и строк в функцию
12.5. Необязательные параметры
12.6. Переменное количество параметров
12.7. Перегрузка функций
12.8. Шаблонные (обобщенные) функции
12.9. Константные параметры
12.10. Статические переменные
12.11. Способы возврата значения из функции
12.12. Указатели на функции и класс function
    12.12.1. Указатели на функции
    12.12.2. Класс function
12.13. Передача в функцию и возврат данных произвольного типа
12.14. Рекурсия
12.15. Встраиваемые функции
12.16. Лямбда-выражения
12.17. Ключевое слово constexpr

Глава 13. Объектно-ориентированное программирование

13.1. Основные понятия
13.2. Создание класса и экземпляра класса
13.3. Объявление полей внутри класса
13.4. Объявление и определение методов
13.5. Конструкторы и деструктор
13.6. Конструктор копирования
13.7. Конструктор перемещения
13.8. Спецификаторы default и delete
13.9. Статические поля и методы
13.10. Создание констант внутри класса
13.11. Константные методы
13.12. Дружественные функции и классы
13.13. Массивы объектов
13.14. Динамическое создание объектов
13.15. Указатели на объекты и члены класса
13.16. "Умные" указатели
    13.16.1. Класс unique_ptr: уникальный указатель
        Управление одним объектом
        Управление массивом
    13.16.2. Класс shared_ptr: совместно используемый указатель
        Управление одним объектом
        Управление массивом
    13.16.3. Класс weak_ptr: "слабый" указатель
13.17. Передача объектов в функцию и возврат объектов
13.18. Наследование
13.19. Множественное наследование
13.20. Указатели на объекты производных классов
13.21. Виртуальные методы
13.22. Динамическое определение типа объекта
13.23. Оператор dynamic_cast
13.24. Абстрактные методы и классы
13.25. Финальные методы и классы
13.26. Вложенные классы
    13.26.1. Обычные вложенные классы
    13.26.2. Локальные вложенные классы
13.27. Методы-фабрики

Глава 14. Перегрузка операторов

14.1. Способы перегрузки операторов
    14.1.1. Перегрузка с помощью операторного метода
    14.1.2. Перегрузка с помощью дружественной функции
    14.1.3. Перегрузка с помощью обычной функции
    14.1.4. Ограничения
14.2. Перегрузка бинарных операторов
14.3. Перегрузка унарных операторов
14.4. Перегрузка операторов инкремента и декремента
14.5. Перегрузка операторов присваивания
14.6. Перегрузка оператора ()
14.7. Перегрузка оператора []
14.8. Перегрузка оператора доступа к члену класса
14.9. Перегрузка операторов new и delete
    14.9.1. Выделение памяти под один объект
    14.9.2. Выделение памяти под массив
    14.9.3. Глобальные операторы new и delete
    14.9.4. Выделение памяти без возбуждения исключения
    14.9.5. Прочие способы перегрузки
14.10. Перегрузка операторов << и >>
14.11. Преобразование объекта в другой тип данных

Глава 15. Шаблонные классы

15.1. Создание шаблонного класса
15.2. Явные специализации
15.3. Совместное использование обобщенных и реальных типов
15.4. Значения по умолчанию
15.5. Наследование шаблонных классов

Глава 16. Динамические массивы

16.1. Вспомогательные средства
    16.1.1. Итераторы
    16.1.2. Функторы
    16.1.3. Инверторы
    16.1.4. Адаптеры
    16.1.5. Редакторы связей
    16.1.6. Обертки ссылок
16.2. Класс array: массив фиксированного размера
    16.2.1. Создание массива и заполнение значениями
    16.2.2. Доступ к элементам
    16.2.3. Перебор элементов
16.3. Класс valarray: динамический массив с числовыми значениями
    16.3.1. Создание объекта
    16.3.2. Определение и изменение количества элементов
    16.3.3. Доступ к элементам
    16.3.4. Перебор элементов
    16.3.5. Поиск минимального и максимального значений
    16.3.6. Смещение элементов
    16.3.7. Вычисление суммы
    16.3.8. Операторы и функции
    16.3.9. Классы slice и slice_array: диапазон значений
    16.3.10. Классы gslice и gslice_array: несколько диапазонов значений
    16.3.11. Класс mask_array: диапазон на основе маски
    16.3.12. Класс indirect_array: диапазон на основе массива с индексами
16.4. Класс vector: динамический массив
    16.4.1. Создание объекта
    16.4.2. Вставка элементов
    16.4.3. Определение и изменение количества элементов
    16.4.4. Удаление элементов
    16.4.5. Доступ к элементам
    16.4.6. Перебор элементов
    16.4.7. Специализация vector<bool>
16.5. Класс bitset: набор битов фиксированного размера
    16.5.1. Создание объекта
    16.5.2. Выполнение операций
    16.5.3. Получение и изменение значений
    16.5.4. Преобразование набора битов в число или строку

Глава 17. Списки и очереди

17.1. Класс list: двусвязный список
    17.1.1. Создание объекта
    17.1.2. Вставка элементов
    17.1.3. Определение и изменение количества элементов
    17.1.4. Удаление элементов
    17.1.5. Доступ к элементам
    17.1.6. Перебор элементов
    17.1.7. Сортировка списка
    17.1.8. Переворачивание списка
    17.1.9. Перенос элементов из одного списка в другой
    17.1.10. Объединение упорядоченных списков
17.2. Класс forward_list: односвязный список
    17.2.1. Создание объекта
    17.2.2. Вставка элементов
    17.2.3. Определение и изменение количества элементов
    17.2.4. Удаление элементов
    17.2.5. Доступ к элементам
    17.2.6. Перебор элементов
    17.2.7. Сортировка списка
    17.2.8. Переворачивание списка
    17.2.9. Перенос элементов из одного списка в другой
    17.2.10. Объединение упорядоченных списков
17.3. Класс deque: двусторонняя очередь
    17.3.1. Создание объекта
    17.3.2. Вставка элементов
    17.3.3. Определение и изменение количества элементов
    17.3.4. Удаление элементов
    17.3.5. Доступ к элементам
    17.3.6. Перебор элементов
17.4. Класс queue: односторонняя очередь
17.5. Класс stack: стек
17.6. Класс priority_queue: очередь с приоритетами

Глава 18. Кортежи, словари и множества

18.1. Класс pair: пара значений
18.2. Класс tuple: кортеж
18.3. Класс map и multimap: ассоциативные массивы
    18.3.1. Создание объекта
    18.3.2. Вставка элементов
    18.3.3. Определение количества элементов
    18.3.4. Удаление элементов
    18.3.5. Доступ к элементам
    18.3.6. Перебор элементов
    18.3.7. Класс multimap: ассоциативный массив с повторяющимися ключами
18.4. Классы unordered_map и unordered_multimap: ассоциативные массивы
    18.4.1. Класс hash: хеш
    18.4.2. Создание объекта
    18.4.3. Вставка элементов
    18.4.4. Определение количества элементов
    18.4.5. Удаление элементов
    18.4.6. Доступ к элементам
    18.4.7. Перебор элементов
18.5. Классы set и multiset: множества
    18.5.1. Создание объекта
    18.5.2. Вставка элементов
    18.5.3. Определение количества элементов
    18.5.4. Удаление элементов
    18.5.5. Доступ к элементам
    18.5.6. Перебор элементов
18.6. Классы unordered_set и unordered_multiset: множества
    18.6.1. Создание объекта
    18.6.2. Вставка элементов
    18.6.3. Определение количества элементов
    18.6.4. Удаление элементов
    18.6.5. Доступ к элементам
    18.6.6. Перебор элементов

Глава 19. Алгоритмы

19.1. Перебор элементов
19.2. Поиск минимального и максимального значений
19.3. Сравнение элементов
19.4. Изменение порядка следования элементов
19.5. Сортировка элементов
19.6. Поиск элементов
19.7. Замена значений элементов
19.8. Удаление элементов
19.9. Копирование и перемещение элементов
19.10. Работа с отсортированными диапазонами
19.11. Разделение диапазона на две группы
19.12. Работа с двоичной кучей
19.13. Работа с диапазонами чисел

Продолжение следует...