Введение
На вводной лекции автор предоставляет необходимую литературу для прочтения. Рекомендуется Философия С++ Брюса Эккеля. Хотя книга и “не свежая”, но дает новичку отличный уровень знаний. Для более опытных лектор советует Современный C++ Скотта Мейерса и Исключительный C++ Герба Саттера. После литературных рекомендаций ты перейдешь к теме занятия: “Как из исходного кода получается программа на C++?”. Ключевым моментом здесь является сборка, состоящая из препроцессинга, компилирования и компоновки: об этих вещах и пойдет разговор.
Память
На данном занятии ты познакомишься с памятью, с тем, как она устроена в компьютере, и какие виды памяти существуют в C++. Все начнется с рассмотрения архитектуры процессоров и участия ядер в работе. У каждого ядра есть свой кеш, используемый для загрузки какого-то количества информации, с которой можно манипулировать напрямую без “походов” в оперативную память. В конце ролика приводится обзор типов памяти (стек и куча), их области применения и тонкости в работе.
Функции
Функции – важная часть любого языка, и поэтому тебе придется знать, какие бывают функции, и как с ними правильно работать. В более узком понимании функции – кусок кода, находящийся в памяти по определенному адресу, к которому может обратиться процессор и выполнить его. Автор рассказывает о соглашениях вызовов функций, встроенных функциях, ссылках и передаче аргументов. В завершении урока ты разберешься с пространством имен, лямбда-функциями и с процессом выделения памяти под нужды программы.
Структуры и классы
На лекции речь пойдет о классах и о том, что с ними связано. В качестве примера приводятся пользователи и их данные: имя, почта и т. д. Если программа маленькая, эти данные можно хранить в переменных, а если код растет, то логично использовать структуры для объединения однотипных данных. Обычно применяется создание типа, состоящего из набора других проинициализированных типов данных, которые не смешиваются в глобальном пространстве имен. Далее в уроке лектор рассказывает о работе со структурами и классами, модификаторами доступа, методами C++ и т. д.
Классы
Вторая лекция о классах начинается с повторения знаний о методах класса, конструкторах и деструкторах. Далее автор разбирает существующие виды приведения типов, служащих для избавления от предупреждений компилятора. Не остались без внимания и операторы сравнения, инкремента/декремента и арифметические операторы, используемые абсолютно в любой программе. В финальной части занятия тебя ждут виртуальные функции, виртуальные деструкторы, абстрактные классы и прочая “ООП-щина”.
Семантика копирования, перемещения
Перед углублением в основную тему ролика автор расскажет о Argument-dependent name lookup (ADL) – правило, опираясь на которое, компилятор ищет функцию или оператор в текущем пространстве имен.
Главная тема начинается с методов, которые компилятор генерирует для тебя неявно, даже если ты об этом забудешь. Остаток урока посвящен непростой теме копирования и перемещения, скрывающей в себе уйму подводных камней и трудностей.
Шаблоны
Продолжение лекции о шаблонах. Сначала лектор расскажет об инстанцировании шаблонов, о передаче параметров при компиляции и т. д. Ты снова вернешься к правилам написания шаблона (ключевое слово + угловые скобки) и узнаешь, какие бывают типы инстанцирования. Неявное происходит во время вызова функции или объекта, а явное – через ключевое слово template. Автор затронет тему специализации шаблонов – одной из самых сложных и полезных для создания библиотек возможностей ЯП. В конце урока будет практическое задание по сериализации типов.
Исключения
Это последняя лекция по языковым конструкциям. На данном этапе ты уже должен чувствовать присутствие силы и способности написать что-то круче, чем практические задания. Этот урок будет посвящен обработке ошибок. Нужно понимать, что существуют штатные ошибки, возникающие естественным образом (не удалось открыть файл), а есть логические ошибки, совершенные программистом. От каждого конкретного случая зависит и вариант обработки этой ошибки.
Стандартная библиотека шаблонов
Данное видео посвящено стандартной библиотеке шаблонов. В С++ этот инструмент выглядит “бедно” в сравнении с Python или C#, но все же позволяет создавать мощные и лаконичные вещи. Из других языков СPP выделяется именно библиотекой шаблонов STL, состоящей из контейнеров (хранение значений), итераторов (доступ к значениям), алгоритмов (операции над данными), адаптеров и функциональных объектов.
Многопоточность
На уровне ОС все запускаемые программы представляют собой процессы. Процессов внутри ОС может быть много, а внутри процессов может существовать разное количество потоков. В любой программе существует минимум один поток. Если в процессоре много ядер, то задачи могут быть между ними распределены и выполняться параллельно. Между разными процессами нельзя использовать общую память т. к. у каждого своя память, но внутри процесса между потоками память общая. Вот о таких занимательных вещах здесь и пойдет разговор.
Финальное занятие
Вот и подошел к концу сей видеокурс. Автор решил последнюю лекцию начать с задачи про обедающих философов, которая отлично раскрывает проблемы, возникающие при многопоточном взаимодействии. Далее в уроке тебя ждет еще несколько задач, требующих написания кода для решения и закрепления материала.
А еще на лекции ты узнаешь об асинхронности, потокобезопасности, преобразовании текста и ускорении сборки.
Комментарии