Course Summary
Learn C++ programming language with this course that covers the basics and dives into advanced topics such as templates, exceptions, and algorithms.Key Learning Points
- Learn the fundamentals of C++ programming language
- Understand advanced topics such as templates and exceptions
- Develop practical skills through hands-on programming assignments
Related Topics for further study
Learning Outcomes
- Learn the fundamentals of C++ programming language
- Develop practical skills through hands-on programming assignments
- Understand advanced topics such as templates and exceptions
Prerequisites or good to have knowledge before taking this course
- Basic knowledge of programming concepts
- Access to a computer with C++ compiler
Course Difficulty Level
IntermediateCourse Format
- Self-paced
- Online
- Video lectures
- Programming assignments
Similar Courses
- C++ For C Programmers, Part A
- C++ For C Programmers, Part B
- C++ For C Programmers, Part C
Related Education Paths
Notable People in This Field
- Creator of C++ programming language
- Chair of the ISO C++ standards committee
Related Books
Description
Во-первых, в «Чёрном поясе» будут изложены темы, без которых ваше представление о C++ будет неполным, — это таблицы виртуальных методов, виртуальные деструкторы, неопределённое поведение, шаблоны с произвольным числом аргументов и forwarding-ссылки. Во-вторых, мы предоставим вам возможность поработать с библиотеками и инструментами, без которых трудно представить современную разработку на С++, — это санитайзеры и protobuf. Наконец, «Чёрный пояс» будет содержать большой проект, который на этот раз будет длиться не одну неделю как обычно, а целых три. После прохождения нашей специализации слушатели должны:
Outline
- Неделя 1. Неопределённое поведение и инструменты поиска проблем
- Что вас ждет?
- Отладочные макроопределения
- Санитайзеры
- Введение в неопределённое поведение
- Онлайн сервисы
- Избавление от накладных расходов
- Выполнение оптимизаций
- Неожиданные последствия неопределённого поведения
- Идиоматический С++ и неопределённое поведение
- Идиоматический С++ и неопределённое поведение (продолжение)
- Инструменты для обнаружения неопределённого поведения
- Решение части E
- Решение части F
- Транспортный справочник, части G–I
- Решение части G
- Решение части H
- Решение части I
- Где задать вопрос: telegram, forum
- Подробнее про дебажные дефайны
- Вердикты санитайзера
- Использование санитайзеров в других окружениях
- Решение задачи «Запрещённые домены» под санитайзером
- Решение задачи «Личный бюджет» под санитайзером
- Решение задачи «Транспортный справочник» под санитайзером
- Онлайн сервисы - ссылки
- Сложение без переполнения
- Символайзер к санитайзеру на Wandbox
- Решение части E
- Решение части F
- Решение части G
- Решение части H
- Решение части I
- Неопределённое поведение
- Неделя 2. Сериализация и protobuf
- Задача сериализации/десериализации данных
- Бинарная сериализация
- Бинарный и текстовый режим потоков ввода/вывода
- Введение в protobuf
- Установка protobuf
- Синтаксис proto-файлов
- Сборка проектов, использующих protobuf
- C++ Protobuf API 1
- C++ Protobuf API 2
- Решение задачи «JSON Printer»
- Решение задачи «Save & Load»
- Пример CMakeLists.txt для сборки проекта с protobuf
- Решение задачи «Телефонная книга»
- Решение задачи «Справочник организаций»
- Бинарная сериализация
- Синтаксис proto3
- Неделя 3. Хранение объектов в памяти и таблица виртуальных методов
- Что такое выравнивание
- Выравнивание сложных объектов
- Выравнивание при наследовании
- Little Endian, Big Endian
- Плотная упаковка
- Виртуальные методы
- Указатель vpointer
- Таблица виртуальных методов
- Конструкторы и деструкторы
- Pure virtual
- Введение в разработку трансляторов
- Транспортный справочник, части J–M
- Транспортный справочник, часть J
- Транспортный справочник, часть K
- Транспортный справочник, часть L
- Транспортный справочник, часть M
- Решения частей J–M
- Решение задачи «Нуклеотид: сжатие структуры данных»
- Интерпретатор языка Mython
- Решение задачи «Лексический анализатор языка Mython»
- Решение задачи «Интерпретатор языка Mython»
- Решение части J
- Решение части K
- Решение части L
- Решение части M
- Неделя 4. Вектор своими руками
- Введение
- Placement new
- Наивная реализация конструкторов и функции Reserve
- Обработка исключений
- Уносим сырую память в класс-обёртку
- Функции std::uninitialized_*
- Оператор присваивания и move-конструктор
- Resize, PushBack и PopBack
- Гарантии безопасности исключений
- Variadic templates
- Наивная реализация EmplaceBack
- Forwarding references
- Транспортный справочник, часть N
- Решение части N
- Решение задачи SimpleVector из «Красного пояса»
- Решение задачи «Optional»
- Решение задачи «EqualsToOneOf»
- Решение задачи «Применить функтор к списку аргументов»
- Решение задачи «Вектор своими руками — 1»
- Решение задачи «Вектор своими руками — 2»
- Как работают std::move и std::forward
- Решение части N
- Требования к стандартному вектору
- Реализация конструкторов и функции Reserve
- EmplaceBack
- Неделя 5. Продолжение финального проекта
- Транспортный справочник, части R–T
- Решение части O
- Решение части P
- Решение части Q
- Решение части T
- Неделя 6. Задача «Электронная таблица»
- Генератор парсеров ANTLR
- Решение задачи «Электронная таблица»
- Станьте ментором курса!
Summary of User Reviews
Discover the C++ Black Belt and take your programming skills to the next level. This course offers comprehensive and engaging lessons that cover everything from the basics to advanced concepts. Many users found the course to be challenging yet rewarding, and appreciated the hands-on approach to learning.Key Aspect Users Liked About This Course
Hands-on approach to learningPros from User Reviews
- Comprehensive and engaging lessons
- Challenging yet rewarding
- Great for advancing programming skills
- Instructor is knowledgeable and engaging
- Good balance of theory and practice
Cons from User Reviews
- Some lessons can be difficult to follow
- Not suitable for beginners
- Some users found the course too fast-paced
- Course materials could be more organized
- Not enough emphasis on debugging