Курс C++ (базовый)
Обучитесь основам классического языка программирования
C++ — язык программирования, знание которого будет однозначным плюсом для вашего резюме. Он быстр, на нем можно писать программы любой сложности и он является фундаментом для обучения, ведь многие языки программирования используют в своей основе принципы C++. У него сложный синтаксис, который требует дисциплины и опыта, но этот язык программирования — классическая музыка в мире IT.
На курсе вы познакомитесь с основами C++ и объектно-ориентированного программирования, а также изучите приемы решения типичных задач программирования и разработаете простое приложение на C++.
После окончания курса ты сможешь понимать основные принципы C++ и разрабатывать простое ПО на этом языке. Курс подготовит тебя к дальнейшему изучению продвинутых аспектов языка C++.
Для освоения программы курса вам понадобится следующее ПО:
1. Visual Studio Community — это специальная программа для разработки приложений и облачных служб для различных платформ. Скачать можно по ссылке.
2. Qt Creator — еще одна платформа для кроссплатформенной разработки продуктов на С, С++ и QML. Скачать можно по ссылке.
3. Git. Программа позволяет хранить ваш код локально и на сайте, а также управлять им. Регистрация по ссылке.
- Теории без практики
- Устаревших механик работы
- Пересказа чужих лекций и книг
- Вопросов без ответа
Это будет увлекательно и эффективно!
- Что такое язык программирования
- Машинные языки
- Низкоуровневые языки (язык ассемблера)
- Высокоуровневые языки
- Трансляторы
- Компиляция
- Интерпретация
- Парадигмы программирования
- Модульная парадигма программирования
- Функциональная парадигма программирования
- Обобщенная парадигма программирования
- Объектно ориентированная парадигма программирования
- История С++
- Что такое система контроля версии и что она решает
- Основные элементы git
- Что такое коммит
- Что такое ветка
- Способы создания репозитория. Виды сервисов, позволяющие создать удаленный репозиторий
- Базовые команды git
- Практика. Создания репозитория локально. Создания репозитория на удаленном сервере
- Пример простой программы С++
- Базовые способы собрать приложение
- Алфавит языка
- Что такое лексемы
- Что такое идентификатор как важная составляющая программы
- Что такое ключевые слова
- Комментарии (однострочные, многострочные)
- Что такое литера. Виды литералов. И зачем они нужны в коде
- Чем отличаются строковый литерал от остальных типов литералов
- Что такое инструкции
- Что значит синтаксическая ошибка. Пример простой синтаксической ошибки
- Что такое семантическая ошибка. Пример семантической ошибки и возможные ее последствия
- Что такое переменная. Синтаксис объявления переменной
- Тип данных. Что такое строгая типизация. Зачем переменной нужен тип данных
- Целочисленный тип данных
- Символьные типы
- Начиная с С++11, целочисленные типы с фиксированными размером, какие проблемы они решают
- Что такое алиас на тип данных. Пример с описанием typedef.
- Понимания типов size_t, time_t — это просто алиас на встроенный тип
- Тип void как маркер разного контекста. Пример контекста использования этого типа
- Логический тип данных
- Вещественные типы данных. Возможные подводные камни представления в памяти
- Простой пример на ассемблере способа представления целочисленных типов и вещественных типов
- Способы объявления переменных. Инициализация переменных.
- Проблема неинициализированных переменных
- Оператор sizeof для получения размера переменных и типов
- Способы инициализации переменных до С++11 и универсальная инициализация начиная с С++11 как средство решения проблем старой инициализации
- Автоматический вывод типа. Ключевое слово auto и decltype
- Константы
- Способы объявления констант
- Что такое свертка констант. Пример С++-кода с объявлением констант и оптимизированного ассемблерного кода
- Виды операторов (унарный, бинарный, тернарный). Их синтаксис
- Неявное преобразование при операторе присвоения. Что такое срезка.
- Что такое сужающее преобразование. Проблема знакового и беззнакового преобразования
- Явное преобразования типов (С-подход и С++-подход)
- Арифметические операции
- Проблема арифметических операций. Целочисленное деление на ноль, переполнение и т.д.
- Смешанные выражения. Приоритет операций
- Автоматический вывод типа как решение проблемы переполнения в арифметических выражениях
- Временная переменная как результат промежуточного вычисления выражения. Как выглядит временная переменная в сгенерированном ассемблерном коде (простое описание)
- Базовые понятия Rvalue и Lvalue
- Составной оператор
- Пост- и пре-инкремент и декремент. В чем отличие между пре- и пост- операцией
- Операторы отношения между операндами. Возможные подводные камни
- Логические операции
- Битовые операции. Что такое установка бита, что такое сброс бита. Что такое little-endian и big-endian. Что такое битовые маски, пример битовых масок до С++11 и начиная с С++11
- Описание разницы между логическим сравнением с применением логических операторов {|| &&} и битовыми операциями {| &}
- Арифметические операции, применимые к типу char и разница с выводом на поток символьного типа и целочисленного типа
- Целочисленный оператор «остаток от деления». Рассмотрения примера ошибочной путаницы между знаковыми и беззнаковыми типами на сгенерированном ассемблерном коде
- Условный оператор if. Пример возможных проблем с висячими else.
- Разные подходы с написаниям оператора if для избежания спагетти-кода
- Что такое область видимости. Что такое блок
- Оператор выбора switch. Проблема fall through. В чем отличие между оператором выбора switch и логическим оператором if
- Что такое compile time и run time-выражение. На примере case-веток оператора выбора switch
- Оператор цикла for. Способы объявления цикла for. Зачем нужен вечный цикл. Возможные проблемы знакового и беззнакового сравнения и их последствия
- Оператор цикла while
- Оператор цикла do while. Использования do while, для решения проблем с ветвлением кода с использованием оператора if
- Тернарный оператор
- Простое понимание точки следования на примере оператора запятой
- Что такое массив и в чем его преимущества
- Объявления массивов. Способы указания размера массива
- Инициализация массива. Возможные ошибки при инициализации массива
- Массив переменной длины как расширение компилятора. Флаг компиляции -pedantic
- Массив символов или строки. Способы объявления. Что такое нуль-терминальный символ. Возможные проблемы при инициализации символьного массива
- Доступ к элементам массива
- Что такое выход за границы массива. Что такое buffer overflow
- Циклы как способ обхода, обработки и вывода массива на экран
- Частые ошибки при выборе типа для переменной цикла при работе с массивом
- Размер массива. Как получить количество элементов массива
- С++11 range for как способ удобной работы с массивом. В чем отличие range for и других циклов и какие проблемы решает range for в отличии от других циклов
- Отличие символьного массива от других типов массивов. Как правильно обходить символьный массив в циклах. Как вывести символьный массив на экран. Как считывать символы введенные с клавиатуры в символьный массив и возможные проблемы
- Многомерные массивы. Примеры представления многомерного массива одномерным массивом
- Базовые понятия памяти стек
- Что такое локальные переменные и как переменные создаются на стеке.
- Что такое автоматическое управление памятью
- Базовое понятие указателя
- Объявление указателей
- Способы инициализации указателя. Что такое невалидный указатель.
- Что такое разыменования указателя и возможные проблемы. nullptr как правильный литерал для инициализации указателя. Что значит понятие «указатель на тип». Размер указателя, модели памяти разных ОС и платформ. Почему для указателя правильный тип есть void*
- Что такое константный указатель и указатель на const. Пример возможных ошибок
- Арифметика с указателями. Чем отличаются арифметика с указателями от арифметики с переменными
- Что общего между массивом и указателем. Как обходить массив с помощью указателя. Что означает указатель на элемент за последним элементом массива и зачем так делать
- Что такое функция и какие она решает проблемы в коде
- Синтаксис функции
- Базовое понятие что такое объявление и определение функции. Пример отличия
- Что такое списки параметров. Способ вызова функции. Задание значения по умолчанию для параметра
- Возвращаемое значение из функции. auto как автоматический вывод возвращаемого значения. Проблемы при автоматическом выводе типа.
- Тип void как маркер невозвращаемого значения функции
- Передача параметров по значению
- Что такое фактические и формальные параметры
- Неправильное использования auto в качестве параметров функции и последующее расширения компиляторов
- Что такое глобальные переменные. Проблема сокрытия имен глобальных и локальных переменных
- Передача по указателю. Способ возврата нескольких значений с функции
- Что такое ссылки. В чем отличие ссылки от указателя
- Ссылка как часть интерфейса функции
- Какие проблемы решает ссылка в сравнении с указателем как параметр функции. Какие преимущества константной ссылки. Почему можно передавать Rvalue как аргумент константной ссылки
- Пример как сделать ссылку невалидной
- Стек и вызов функций
- Соглашение о вызове функций
- Массивы как параметры функции. Способы объявления массива как параметра функции и частые ошибки. Проблема получения количества элементов массива в функции
- Рекурсия. Inline-функции
- Что такое перегрузка функций. Что такое mangling имен функции на примере генерации ассемблерного кода
- Почему перегрузка недоступна в языке С. Простое описания ключевого слово extern «C» как пример описания перегрузки
- Что такое указатель на функцию и какие решает проблемы передача функции как параметр функции на примере алгоритма сортировки
- Базовые понятия что такое lambda как замена указателю на функцию.
- Что такое std::function
- Проблемы при возврате локальных переменных с функции по ссылке или указателю
- Снятие константности с аргумента использования std::const_cast
- Что такое пространства имен
- Что такое вложенные пространства имен
- Новые возможности объявления вложенных пространств имен в С++17
- Что такое структуры. Какие они решают проблемы
- Объявление структур
- Способы доступа к полям структуры
- Способы инициализации структур до С++11
- Инициализация структур начиная с С++11
- Размер структур. Что такое выравнивание структур. Что такое padding в структурах
- Неименованные структуры
- Struct binding С++17. Какие проблемы решает
- Что такое перечисления и какие оно решает проблемы
- Что такое unscoped-перечисления и какие у него проблемы
- Что такое scoped-перечисления, начиная с С++11 и какие он решает проблемы
- Что такое объединения. Какие он решает проблемы
- Что такое каламбур типов и как объединение помогает в преобразовании несовместимых типов
- Базовые понятия о моделях памяти. Их особенности и отличия
- Отличие работы со стековой памятью и динамической памятью (куча)
- Что такое менеджер памяти или почему динамическое выделение памяти такое дорогое
- Работа с динамической памятью, используя С-функции
- Работа с динамической памятью, используя С++-подход
- Возможные проблемы при работе с динамической памятью
- Базовые понятия ООП
- Что есть недостатком функционального программирования и какие задачи решает ООП
- Основные киты ООП
- Синтаксис объявления класса
- Что такое поля класса
- Создание объекта класса
- Уровни доступа в классе
- Способы объявления константных полей в классе до С++11 и после
- Что такое статические поля
- Что такое метод класса. Чем отличается метод от обычной функции
- Что такое this. Что такое соглашение о вызове thiscall
- Способы объявления методов класса. Чем отличаются определение метода внутри класса от определения за пределами класса
- Что такое константные методы и какие они решают проблемы.
- Ключевое слово mutable
- Что такое статические методы и чем они отличаються от обычных методов
- Что такое конструктор и какие он решает проблемы
- Виды конструкторов до С++11
- Список инициализации. Способ инициализации полей класса, начиная с С++11. Подводные камни при инициализации полей класса
- Зачем нужен конструктор копирования и оператор присваивания
- Что такое деструктор и какие он решает проблемы
- Правильная сигнатура для конструкторов и оператора присваивания
- Перегрузка конструкторов
- Порядок инициализации полей при создании объекта
- Что такое наследование и какие оно решает проблемы
- Виды наследования
- Чем является наследование (public-наследования)
- Расположение объектов в памяти при наследовании
- Порядок инициализации при наследовании. Подводные камни
- Порядок вызовов при разрушении объекта
- Shadowing-методы при наследовании
- Множественное наследование. В чем отличие от одиночного наследования. Подводные камни множественного наследования
- Неоднозначность вызова метода при множественном наследовании
- Проблема ромбового наследования
- Что такое виртуальное наследование и зачем оно нужно в контексте наследования
- Ключевое слово final
- Что такое полиморфизм
- Что такое виртуальная функция
- Что такое динамический и статический полиморфизм и как он реализуется в языке С++
- Ключевое слово override и какие он решает проблемы в контексте виртуальных функций
- Что такое виртуальный деструктор и зачем он нужен
- Что такое чисто виртуальные функции. Что такое абстрактный класс
- Что такое vtable и vtpr. На что они влияют
- Что такое шаблоны и обобщенное программирование
- Что общего между макросом и шаблоном. Какие проблемы макроса
- Шаблоны класса
- Что такое инстанцирование шаблона
- Проблема раздувания кода
- Параметры шаблона. Передача значения в качестве шаблонного аргумента
- Специализация. Частичная специализация. Явная специализация
- Шаблонные функции
- Шаблонный метод. Шаблонный конструктор. Какие задачи они позволяют решить
- Разница в вызове шаблонного класса и шаблонной функции
- Явная специализация шаблона функции
- Что такое перегрузка операторов
- Когда стоит применять перегрузку операторов
- Какие операции разрешено перегружать
- В чем разница между перегрузкой оператора как методом класса и обычной функцией
- Базовые соглашения о перегрузке операторов
- Тонкости при перегрузке пре- и пост-инкремента и декремента
- Рекомендации по написанию интерфейса перегрузки операторов
- Особенности перегрузки вывода на поток
- Что такое пространства имен. Их применения. Какие они решают проблемы
- Что такое неименованные пространства имен, что общего между static и неименованными пространствами имен
- Что такое препроцессинг
- Что такое компиляция
- Что такое линковщик
- Виды компиляторов и их особенности
- Что такое раздельная компиляция
- Что такое заголовочный файл
- Что такое стражи
- Что такое библиотеки
- Система сборки Make
- CMake как генератор системы сборки
- Обучение в формате просмотра стрима или записи занятий
- Личный кабинет с доступом к материалам курса
- Помощь ментора курса
- Актуальную программу обучения