Часть 1: Под капотом программирования C++....7
1. Сборка приложения C++ ....7
Сборка приложений на C++ ....7
Предварительная обработка....8
Использование модулей ....10
Компиляция....11
Анализ синтаксиса....12
Оптимизация ....12
Генерация машинного кода ....13
Компоновка ....13
Связывание библиотек ....17
Низкоуровневое программирование на C++ ....18
Функции....18
Рекурсия ....20
Данные и память ....24
Виртуальная память ....25
Адресация ....27
Типы данных ....28
Указатели ....29
Стек и куча ....33
Поток управления ....36
Замена условных обозначений указателями функций ....37
Детали ООП ....38
Высокоуровневые детали объектов ....41
Работа с классами ....44
Инициализация, уничтожение, копирование и перемещение ....44
Взаимосвязь классов ....47
Агрегация и композиция ....47
Наследование ....48
Резюме ....48
2. За пределами программирования объектно- ориентированного подхода ....49
Введение в ООП и объектную модель C++ ....50
Понимание объектов ....50
Низкоуровневые детали объектов ....51
Высокоуровневые детали объектов ....53
Объектная модель C++ ....54
Состояния ....58
Идентичность ....58
Поведение ....59
Подобие классу ....60
Работа с классами ....62
Классы с точки зрения компилятора ....63
Инициализация и уничтожение ....66
Копирование объектов ....67
Перемещение объектов ....71
Ссылка на значение lvalue ....72
Ссылка на значение rvalue ....72
Замечания по перегрузке операторов ....74
Инкапсуляция и публичный интерфейс ....76
Отношения классов ....79
Агрегация и композиция ....79
Под капотом наследования и полиморфизма ....80
Наследование ....80
Наследование с точки зрения компилятора ....82
Композиция против наследования ....85
Защищенное наследование ....86
Полиморфизм ....89
Виртуальные функции под капотом ....90
Классические шаблоны проектирования ....93
Составной шаблон ....95
Шаблон декоратора ....100
Принципы проектирования ....105
Единая ответственность ....105
Принцип открытости-закрытости ....107
Принцип замещения Лисковой ....109
Принцип разделения интерфейсов ....111
Принцип инверсии зависимостей ....112
Больше UML в разработке проектов ....113
Диаграмма последовательности ....114
Резюме ....118
3. Понимание и проектирование шаблонов ....119
Мотивация для использования шаблонов ....120
Шаблоны функций ....121
Синтаксис ....121
Экземпляр ....122
Исключение или дедукция....123
Специализация и перегрузка ....123
Шаблоны классов....124
Синтаксис ....125
Инстанцирование ....125
Явное инстанцирование ....126
Неявное инстанцирование ....127
Специализация ....128
Понимание вариативных шаблонов ....131
Синтаксис ....132
Примеры ....133
Объяснение параметров и аргументов шаблона ....134
Параметры шаблона ....134
Параметр шаблона не относящийся к типу ....134
Параметр шаблона типа ....135
Шаблонный параметр шаблона ....136
Шаблонные аргументы ....138
Аргументы шаблона, не относящиеся к типу ....138
Шаблоны аргумента типа....139
Шаблонные аргументы шаблона ....139
Аргументы шаблона по умолчанию ....139
Реализация признаков типа ....141
Оптимизация алгоритмов с помощью признаков ....142
TMP и его применение (Метепрограммирование) ....145
Итог ....145
Вопросы ....146
4. Метапрограммирование шаблонов ....147
Возвращение к основам (программирование во время компиляции с использованием шаблонов) ....148
Оценка во время компиляции с помощью constexpr....156
Конструкторы, определяемые постоянными выражениями (constexpr) ....158
SFINAE И enable_if<> ....162
Ошибка подстановки аргументов ....163
Отключение шаблонов с помощью enable_if<> ....165
Признаки типа ....169
isFundamental ....173
isArithmetic ....174
isScalar ....174
IsConst ....176
isVolatile ....177
isPolymorphic ....177
isAbstract ....178
Is_signed ....179
5. Управление памятью и Умные указатели ....180
Понимание памяти компьютера....181
Проектирование запоминающего устройства ....182
Понимание компьютерной памяти с точки зрения высшего уровня ....184
Регистры....185
Кэш-память....188
Основная память ....190
Постоянное хранение ....191
Основы управления памятью ....192
Пример управления памятью....192
Использование умных указателей ....195
Использование идиомы RAII ....196
std::unique_ptr ....199
std::shared_ptr и std::weak_ptr ....199
Сбор мусора ....202
Использование аллокаторов ....205
Типы аллокаторов ....206
Часть 2: Разработка надежных и эффективных приложений ....213
6. Копаемся в структурах данных и алгоритмах в STL ....214
Последовательные структуры данных....214
Контейнеры STL....220
Использование std::vector и std::list ....220
Использование адаптеров для контейнеров ....224
Итерирование контейнеров ....226
Концепции и итераторы ....229
Понимание концепций ....229
Использование итераторов в C++20 ....230
Графы и деревья ....235
Деревья ....235
Графы ....237
Хеш-таблицы ....238
Алгоритмы ....240
Алгоритмы поиска ....240
Сортировка ....241
7. Продвинутые структуры данных....242
B-деревья ....244
Поиск ....247
Вставка ....250
Удаление ....254
Детали реализации std::unordered_map ....258
Как std::unordered_map организует хранение элементов и как элементы вставляются или ищутся в них std::unordered_map....259
Хэш-функции и стратегии, которые используются для их реализации ....261
Выбор цифр ....261
Скложение ....262
Использование модуля ....262
Столкновения и способы их устранения ....263
Кучи и их применение ....264
Расширенные списки ....273
Списки пропусков ....273
Списки XOR ....278
Резюме....280
8. Функциональное программирование ....281
Функциональное программирование раскрыто ....282
Использование диапазонов....285
Функции первого и высшего порядка ....288
Зачем использовать функциональное программирование? ....291
Принципы функционального программирования ....293
Чистые функции ....294
Сложение....296
Более глубокое изучение рекурсии ....297
Рекурсия головы ....299
Хвостовая рекурсия....299
Метапрограммирование в функциональном C++....300
9. Параллелизм и многопоточность ....304
Понимание параллелизма и многопоточности ....305
Процессы ....307
Проблемы с процессами ....314
Потоки ....315
Работа с потоками ....318
Ожидание потока ....319
Использование std::jthread ....322
Передача аргументов в функцию потока ....325
Управление потоками и обмен данными ....325
Совместное использование данных ....327
Защита общих данных с помощью мьютекса ....328
Избегание тупиковых ситуаций ....329
Проектирование параллельного кода ....329
Знакомство с корутинами ....332
10. Проектирование структур параллельных данных....335
Безопастность потоков....336
Параллельные структуры данных на основе блокировки ....337
Потокобезопасный шаблон синглтонов ....337
Синхронизированные счетчики ....341
Параллельные стеки ....343
Не требующие блокировки параллельные структуры данных ....345
Использование атомарных типов ....345
Операции над атомарными типами ....347
Стеки без блокировок ....349
Очередь без блокировки....352
Хэшевые таблицы без блокировки ....354
Набор без блокировки ....355
Больше операций на атомиках....357
11. Проектирование приложений готовых к производству....358
Шаблоны проектирования....359
Singleton ....360
Factory ....360
Адаптер ....360
Композит ....361
Обозреватель ....362
Команда ....362
Применение шаблонов проектирования ....363
Проблема ....363
Использование проектирования, ориентированного на домен ....363
Пример реального проекта ....364
12. Внедрение шаблонов проектирования в приложениях на C++ ....373
Паттерны проектирования в разработке игр ....374
Шаблон синглтон ....374
Factory ....376
Flyway....377
Шаблоны проектирования в приложениях с интенсивным использованием данных ....378
Шаблон прокси....379
Шаблон декоратора ....382
Шаблон итератора ....385
Модели проектирования в корпоративных приложениях ....385
SOA ....386
13. Сети и безопасность ....387
Введение в сети, модель OSI и сетевое программирование с использованием сокетов ....388
Модель OSI....388
Сетевые приложения под капотом ....390
Программирование сетевых приложений с использованием сокетов ....391
Понимание сетевых протоколов ....392
Проектирование эхо-сервера ....395
Защита приложений....398
Защита сетевых приложений ....400
14. Отладка и тестирование ....402
Понимание первопричины проблемы ....403
Обзор RCA ....403
Профилактика лучше, чем лечение - хорошее поведение при кодировании ....405
Проблема неинициализированной переменной ....405
Побочные эффекты при использовании сложных выражений ....405
Смешанные задачи со знаками и без знаков....405
Порядок оценки проблемы ....406
Проверка во время компиляции и проверка во время выполнения ....406
Избегайте утечек памяти ....407
Отладка программ ....408
Инструменты для отладки программ на C/C++ ....408
Обзор GDB....409
Примеры GDB ....410
Установка точек останова и проверка значений переменных ....411
Практические стратегии отладки ....415
Статический и динамический анализ ....416
Статический анализ ....416
Динамический анализ ....416
Тестирование, TDD и BDD ....418
Модульное тестирование ....418
TDD ....419
BDD ....420
15. Разработка крупномасштабных приложений....422
Внедрение крупномасштабной, кроссплатформенной организации проектов....423
Организация крупномасштабных, кроссплатформенных проектов на C++ ....423
Масштабный кроссплатформенный проект на C++ ....424
Лучшие практики и стратегии управления крупномасштабным кроссплатформенным проектом на C++ ....426
Горизонтальное и вертикальное масштабирование ....427
Горизонтальное масштабирование ....427
Вертикальное масштабирование ....428
Масштабирование приложений на C++ ....429
Горизонтальное масштабирование в C++ ....429
Вертикальное масштабирование в C++ ....429
Проектирование приложений, требующих больших объемов данных ....430
Основная функция ....432
16. Понимание и использование C++ в задачах машинного обучения ....435
Введение в искусственный интеллект ....435
Компьютерное зрение....436
НЛП ....438
Рассуждения о знаниях ....439
ML....440
Понимание ML ....441
Разработка алгоритма, который учится ....442
Категории ML ....444
Приложения ML ....446
Нейронные сети....447
Кластеризация....448
Регрессионный анализ ....449
Регрессионный анализ ....450
C++ и ML ....452
17. Использование C++ в науке о данных ....453
Введение в науку о данных ....454
Пример на C++ ....455
Сбор и обработка данных ....457
Пример на C++ ....458
Очистка и обработка данных ....460
Пример на C++ ....461
Применение алгоритмов машинного обучения ....463
Пример на C++ ....464
Визуализация данных ....466
Пример на C++ ....466
Резюме ....468
18. Разработка и внедрение системы анализа данных ....469
Использование и обработка статистических данных ....470
Пример на C++ ....471
Работа с табличными и прямоугольными данными ....473
Пример на C++ ....474
Полная стратегия проектирования трубопроводов ETL ....476
Пример на C++ ....477
Резюме ....480
Добро пожаловать в Expert C++! Если вы опытный разработчик на C++, желающий повысить свою квалификацию и раскрыть весь потенциал C++20, вы пришли по адресу.В этом экспертном руководстве мы тщательно продумали путь обучения, чтобы дать вам передовые методы программирования и практические знания, которые выходят за рамки традиционного объектно-ориентированного программирования. Если вы хотите разрабатывать высокопроизводительные приложения, работать с передовыми структурами данных или освоить многопоточность и параллелизм, эта книга станет вашим незаменимым помощником.
Мы расскажем вам о тонкостях проектирования шаблонов, включая мощную сферу метапрограммирования шаблонов. Управление памятью и умные указатели станут вашими союзниками, и вы с уверенностью возьметесь за сложные проекты. Окунитесь в царство структур данных, используя контейнеры стандартной библиотеки шаблонов (STL), а затем расширьте границы с помощью продвинутых структур данных в C++. Откройте для себя элегантность функционального программирования и тонкости параллелизма и многопоточности, а также научитесь проектировать параллельные структуры данных.
По мере продвижения мы будем вести вас через процесс создания готовых к работе приложений, внедрения основных моделей проектирования, понимания принципов работы сети и безопасности. Кульминацией книги станет ваше просвещение в области отладки и тестирования, а затем глубокое изучение проектирования крупномасштабных приложений.
Независимо от того, хотите ли вы разрабатывать программное обеспечение корпоративного уровня или передовые проекты, эта книга призвана помочь вам стать опытным программистом на C++. Так что не теряйте времени и отправляйтесь в это преображающее путешествие.
Счастливого программирования!
Основная целевая аудитория - опытные разработчики на C++, желающие повысить свою квалификацию и создавать приложения профессионального уровня. Если вы хотите освоить сложные концепции программирования, повысить производительность приложений или изучить передовые методы, эта книга станет ценным источником информации на вашем пути.
Вторичная целевая аудитория охватывает инженеров-программистов и студентов, изучающих компьютерные науки и заинтересованных в изучении передовых методов программирования на C++ и открытии реальных приложений этого языка. Изучив содержание этой книги, вы сможете расширить свои знания и развить практический опыт в использовании языка C++ для решения различных проектов и задач.Независимо от вашего образования и уровня опыта, «Эксперт C++» призван наделить вас ценными знаниями и практическими навыками, которые помогут вам стать опытным и умелым программистом на C++.