Голосов: 0
#1
Разработчик прикладного программного обеспечения (Языки C и C++) [2021]
Высшая инженерная школа СПбПУ
Марина Абрамова, Иван Брык, Наталия Костина, Алексей Маслаков, Марина Полубенцева, Евгения Тучкевич
Программа посвящена одной из самых популярных технологий разработки программного обеспечения. Особенностью программы является модульный подход, позволяющий осваивать дисциплины от простого к сложному.
Традиционно языки C/C++ используются для различных прикладных задач: расчеты и вычисления, графические приложения, игры, встраиваемые системы и решения.
Вы освоите не только основы программирования на языках С/C++, но и познакомитесь с прикладной библиотекой Qt и новыми стандартами С++11, 14, 17, 20.
1. Базовую структуру цифрового компьютера, организацию основной памяти и коммуникаций в вычислительном узле;
2. Существующие приложения и интерфейсы взаимодействия с ними;
3. Типы данных и действия с ними в цифровом компьютере;
4. Системы кодировки символов и форматы хранения исходных текстов программ;
5. Базовые понятия алгоритмизации и процедурного программирования;
6. Отличия процедурных и объектно-ориентированных языков программирования высокого уровня;
7. Этапы жизненного цикла программного обеспечения и этапы получения исполняемого файла;
8. Встроенные типы данных в языках программирования;
9. Основные синтаксические конструкции языка программирования высокого уровня;
10. Пространство имен стандартной библиотеки;
11. Особенности создания и использования многомерных массивов;
12. Динамическое выделение памяти;
13. Возможности использования функций и указателей;
14. Объектно-ориентированные возможности среды разработки MS Developer Studio.Net;
15. Объектно-ориентированные возможности стандартной библиотеки С++;
16. Отличие понятия наследования и внедрения, отличие понятия интерфейса и реализации.
17. Внутреннее устройство контейнеров стандартной библиотеки;
18. Средства, предоставляемые стандартной библиотекой С++ для обобщенного программирования;
19. Средства, предоставляемые языком С++ для поддержки RTTI;
20. Средства, предоставляемые языком С++ и стандартной библиотекой С++ для обработки нештатных ситуаций;
21. Технологии использования новых встроенных понятий языка С++ согласно стандартам С++11, 14, 17, 20;
22. Принципы использования новых средств, предоставляемых согласно стандарту стандартной библиотекой (C RunTime library).
23. Состав интегрированной среды разработки и синтаксис Qt;
24. Методологии разработки программного обеспечения, основные составляющие мета-объектной системы Qt;
25. Принципы архитектуры приложения MVC (model-view-controller);
26. Методы и приемы формализации и алгоритмизации поставленных задач.
Тема 1. Базовая структура цифрового компьютера
1.1. Основные понятия электронной цифровой информационной техникиТема 2. Организация основной памяти и коммуникаций в вычислительном узле.
1.2. Классы цифровых компьютеров и развитие классификации
- Типы данных (операндов) в программировании.
- Двоичное кодирование в электронной цифровой информационной технике.
- Операции с элементами данных и комбинационные исполнительные блоки. Электронные элементы с памятью и хранение элементов данных.
- Структура простейшего тракта цифровой обработки и понятие тактирования в цифровом устройстве.
1.3. Основы организации цифрового процессора
- Простейший цифровой компьютер с хранимой программой и его составные части.
- Процессорный (исполнительный) блок, его назначение и выполняемые функции. Реализация системы команд процессора и расширения АСК.
- Основная память: адресная организация.
- Процессорные команды и инструкции языка высокого уровня.
- Трансляция.
- Цикл выполнения процессорной команды (кратко)
Практические занятия:
- Структура команды «в пространстве битов» и экономичное кодирование команды. Структурные способы ускорения выполнения потока команд. Суперскалярность как средство выравнивания времени выполнения микроопераций. Многопоточность.
Изучение операций с элементами данных.
Знакомство с комбинационными исполнительными блоками.
Знакомство со структурой простейшего тракта цифровой обработки.
2.1. Адресная организацияТема 3. Типы данных и действия с ними в цифровом компьютере. Организация системы команд
2.2. Коммуникационные подсистемы в компьютере
- Соотношение скоростей процессора и памяти.
- Задержка доступа (Latency, Responce Time) и пропускная способность (ThroughPut, Bandwidth).
- Уровни иерархии памяти: регистры процессора, КЭШ (многоуровневый), основная память (с адресной организацией), локальная подсистема хранения (диски), сеть.
- Типовая организация КЭШ как многослойной памяти с ассоциативной выборкой.
- Основная память: распределение адресов в минимальной вычислительной системе.
- Основная память: трансляция адресов: отображение адресных пространств друг на друга – для чего и как.
- Виртуальная память – что это.
- Механизмы защиты памяти: аппаратная поддержка.
- Аппаратная поддержка глобальной адресации в многоядерном компьютере с несколькими блоками локальной основной памяти.
- Проблема обеспечения когерентности памяти в компьютере с глобальной адресацией
2.3. Вычислительный узел
- Параллельная адресуемая магистраль (шина).
- Последовательные шины.
- Причины перехода от параллельных шин к последовательным
Практические занятия:
- Организация подсистемы памяти в ВУ.
- Глобальная адресация в пределах ВУ и задачи оптимизации кода.
- Преимущества, недостатки, проблемы, связанные с использованием глобальной адресации.
Знакомство с адресной организацией.
Использование коммуникационных подсистем в компьютере.
Изучение организации подсистемы памяти в ВУ.
3.1. Целочисленные операнды
3.2. Стандарт кодирования чисел плавающей точки
- Двоичная система счисления, ограниченность разрядной сетки и диапазона представимых значений.
- Знакопеременные целые и дополнительный код.
- Правила выполнения действий с целыми и набор целочисленных команд обработки в цифровом процессоре.
- Адреса: числа или не вполне числа?
3.3. Нечисловые данные
- Проблемы точности представления и диапазона представимых значений.
- Проблемы нарастания ошибки при выполнении действий. Всегда ли можно использовать результат плавающей операции?
- Набор команд плавающей точки.
- Конвейеры плавающей точки.
Практические занятия:
- Битовые поля: что это?
- Примеры использования битовых полей.
- Основные операции с битовыми полями.
- Поддержка работы с битовыми полями в системе команд процессора.
- Кодирование текстов. Стандарт Unicode ISO/IEC 10646.
- Звуковая, видео- и 3D-информация: одномерный либо многомерный массив элементов
Правила выполнения действий с целыми и набор целочисленных команд обработки в цифровом процессоре.
Проблемы точности представления и диапазона представимых значений.
Поддержка работы с битовыми полями в системе команд процессора.Тема 1. Введение в программирование на языках C/C++
1.1 Стандарт языка С++. Общие принципы структурного программированияТема 2. Стандартные типы данных
1.2 Базовые понятия языка. (Структура программы. Ключевые слова. Идентификаторы.)
2.1 Понятие типа данных. Константы (литералы).Тема 3. Операторы
2.2 Переменные. Понятия, связанные с переменными. Инициализация переменных
Практические занятия:
Использование литералов при написании выражений.
Перечисления - enum
Базовые типы данных, неявное приведение типов данных
Явное приведение типов данных. Операторы явного приведения типа
Область действия, область видимости, время существования переменной
3.1 Понятия, связанные с операторами.Тема 4. Инструкции
3.2 Категории операторов. Специфика использования
3.3 Побитовые операторы
Практические занятия:
Ассоциативность и приоритет операторов.
Оператор присваивания и арифметические операторы.
Логические операторы и операторы отношения.
Побитовые операторы и операторы сдвига.
4.1 Категории инструкций. Инструкции условия. Инструкции выбораТема 5. Препроцессор
4.2 Инструкции цикла. Инструкции безусловной передачи управления
Практические занятия:
Выполнение инструкции if…else. Выполнение инструкции switch.
Выполнение инструкции for, while, do… while.
Выполнение инструкции break, continue.
5.1 Назначение препроцессора. Макроподстановки.Тема 6. Указатели
5.2 Директивы условной трансляции. Заголовочные файлы.
Практические занятия:
Использование макросов с параметрами. Директивы #define и #undef
Использование директив условной трансляции: #ifdef, #ifndef, #else, #endif. Директивы #if, #elif, #else, #endif. Оператор препроцессора defined.
Настройка опций проекта.
Использование заголовочных файлов. Директива #include
6.1 Понятие указателя. Виды указателейТема 7. Массивы. Связь массивов и указателей
6.2 Арифметика указателей. Преобразование указателей.
Практические занятия:
Объявление и определение указателя.
Инициализация указателя и оператор получения адреса объекта.
Разыменование указателя.
Арифметика указателей.
Преобразование типа указателя.
void* – указатель.
Указатели и ключевое слово const.
Конструкции типа "указатель на указатель".
7.1 Понятие массива. Встроенные одномерные массивы.Тема 8. Ссылки
7.2 Алгоритмы работы с массивами. (сортировка, поиск)
Практические занятия:
Объявление, определение и инициализация встроенных массивов.
Неполная инициализация встроенных массивов.
Модификатор const применительно к массивам.
Простейшие алгоритмы поиска и сортировки.
8.1 Понятие ссылки. Сравнение ссылок и указателей.Тема 9. Функции
Практические занятия:
Специфика инициализации и использования ссылок.
Ссылка на указатель
9.1 Понятия, связанные с функциями в С/C++.Итоговая аттестация
9.2 Способы передачи параметров функции
9.3 Возвращаемое функцией значение. Ключевое слово const и функции.
Практические занятия:
Объявление, определение и вызов функции.
Передача параметров по значению, по ссылке, по указателю.
Передача функции указателя на массив (встроенный массив, динамический массив).
Тема 1. Данные
1.1 Пространства имен Директива using.Тема 2. Массивы
- Пространство имен стандартной библиотеки.
- Неименованные пространства имен.
- Псевдонимы пространств имен.
2.1 Многомерные массивыТема 3. Функции
2.2 Динамическое выделение памяти.
- Эквивалентные указатели на многомерные массивы.
Практические занятия
- Динамические массивы.
- Операторы new и delete.
- Формы оператора delete.
- Способы создания динамических двумерных массивов.
Создание (и уничтожение) динамических массивов.
Операторы new и delete.
Указатели на многомерные массивы.
3.1 Функции и массивыТема 4. Типы данных, определяемые пользователем
3.2 Перегрузка имен функций.
- Передача функции указателя на массив.
3.3 Переменное число параметров.
- Рекурсивные функции.
- Перегрузка имен функций.
- Использование рекурсивных функций.
3.4 Указатели на функции.
- Файловый ввод/вывод.
- Переменное число параметров.
- "Старые" потоки ввода/вывода языка С.
- Функции printf и scanf.
- Ключи формата ввода/вывода.
- Файловый ввод/вывод. Диагностика ошибок.
Практические занятия
- Сложные указатели.
- Указатель на функцию.
- Вызов функции с помощью указателя.
- Использование указателей на функции в качестве параметров.
- Массив указателей на функции.
- Примеры сложных объявлений функций и указателей на функции.
Передача функции указателя на массив (встроенный массив, динамический массив).
Функции с переменным числом параметров.
Рекурсивные функции.
Указатель на функцию. Указатель на функцию в качестве аргумента другой функции.
Массивы указателей на функции.
4.1 Структуры языка Си.
4.2 Битовые поля.
- Структуры и функции.
- Назначение структур.
- Использование структур.
Практические занятия
- Объединения языка Си.
- Назначение битовых полей.
- Использование битовых полей.
- Назначение объединений.
- Использование объединений.
Объявление структуры.
Создание экземпляров пользовательского типа.
Использование структур: массив объектов пользовательского типа, передача агрегатного объекта в функцию.
Пример использования структур - картотека.Тема 1. Парадигмы объектно-ориентированного программирования
1.1 ДелегированиеТема 2. Базовые понятия объектно-ориентированного программирования, их реализация средствами С++
1.2 Инкапсуляция
1.3 Наследование
1.4 Полиморфизм
2.1 Переход от процедурного к объектно-ориентированному программированиюТема 3. Структуры и объединения С++
2.2 Понятие класса Члены класса (поля, методы). Создание экземпляра класса.
- Рассмотрение решения одной и той же задачи в процедурном и объектно-ориентированном стиле
2.3 Спецификаторы доступа
- Доступ к public членам класса посредством объекта.
- Доступ к членам класса посредством указателя.
2.4 Конструкторы
- Спецификаторы доступа public, private.
2.5 Семантика перемещения и конструктор копирования
- Конструктор по умолчанию.
- Конструктор с параметрами.
- Конструктор копирования
2.6 Деструктор
- Конструктор перемещения (move конструктор копирования)
Практические занятия
- Специфика объявления деструктора как метода класса.
- Создание и уничтожение объектов с разным способом хранения
Объявление класса. Спецификаторы доступа.
Создание экземпляра класса. Реализация методов класса.
Доступ к public членам класса посредством объекта, селектор «.». Указатель «this».
Конструктор по умолчанию. Конструктор с параметрами. Динамическое создание объектов и вызов конструктора.
Специфика объявления деструктора как метода класса. Создание и уничтожение объектов с разным способом хранения.
Ключевое слово сonst и классы. Конструктор копирования. Указатель на класс.
Доступ к членам класса посредством указателя. Селектор «->».
Массивы и классы. Массивы объектов класса. Массивы указателей на объекты класса.
3.1 Отличия структур языка С++ от структур и объединений языка СТема 4. Битовые поля в структурах и классах С++
3.2 Отличия объединений языка С++ от структур и объединений языка С
- Специфика struct в языке С++
Практические занятия
- Специфика union в языке С++
1. Использование объединений С++
2. Использование структур С++
4.1 Объявление битовых полейТема 5. Взаимоотношения между классами. Открытое одиночное наследование
4.2 Обращение к битовым полям.
- Битовые поля в языке С++.
- Отличия битовых полей языка С++ от битовых полей языка С
Практические занятия
- Специфика битовых полей Правила обращения к битовым полям
Использование полей битов в С++.
5.1 Объявление производного классаТема 6. Полиморфизм
5.2 Правила открытого наследования
- Объявление производного класса.
- Спецификатор доступа protected в базовом классе.
- Спецификаторы наследования
5.3 Пример неправильного построения иерархий классов
- Порядок вызова конструкторов и деструкторов.
- Передача параметров базовому классу при конструировании.
- Специфика передачи параметров конструктору копирования базового класса.
Практические занятия
- Пример неправильного построения иерархий классов
Простое (single) открытое наследование.
Объявление производного класса.
Спецификатор доступа protected в базовом классе. Спецификаторы наследования. Порядок вызова конструкторов и деструкторов.
Специфика передачи параметров конструктору копирования базового класса.
6.1 Раннее и позднее связываниеТема 7. Дружественные классы и функции
6.2 Виртуальные функции. Механизм вызова виртуальной функции
- Понятие о раннем и позднем связывании
6.3 Чисто виртуальные функции.
- Понятие о виртуальных функциях.
- Специфика формирования компилятором вызова виртуальной функции
6.4 Наследование интерфейса и наследование реализации
- Абстрактные классы
- Понятие о чисто виртуальных функциях и абстрактных классах.
- Специфика чисто виртуальных функций
Практические занятия
- Отличие наследования интерфейса и наследования реализации
Виртуальные методы класса.
Виртуальные деструкторы.
Чисто виртуальные функции и абстрактные классы.
7.1 friend – функцияТема 8. Перегрузка операторов
7.2 friend – класс, friend – метод класса
- Понятие о friend – функциях.
- Назначение глобальных friend – функций
Практические занятия
- Понятие о friend – классах.
- Понятие о friend – методах класса.
Использование глобальных friend –функций для доступа к защищенным членам класса.
Использование friend –классов для доступа к защищенным членам другого класса.
8.1 Специфика перегруженных операторов.Тема 9. Сложные указатели
8.2 Перегрузка методом класса
- Способы перегрузки
- Правила перегрузки унарных и бинарных операторов.
- Перегрузка оператора с помощью метода класса.
- Перегрузка с помощью глобальной friend-функции
8.3 Семантика перемещения и оптимизация оператора присваивания
- Специфика перегрузки оператора с помощью метода класса
8.4 Перегрузка глобальной функцией
- Использование move-оператора присваивания для повышения эффективности работы прогаммы.
Практические занятия
- Специфика перегрузки оператора с помощью глобальной функции
Правила перегрузки унарных и бинарных операторов. Перегрузка оператора с помощью метода класса.
Специфика перегрузки оператора присваивания.
Move-оператор присваивания. Оператор присваивания и нетривиальные классы. Оператор присваивания и перегрузка.
Перегрузка с помощью глобальной friend-функции.
Перегрузка оператора << (вывод) в библиотечный ostream .
Ассоциативный массив – программа «База данных о сотрудниках»
9.1 Указатели на переменные классаТема 10. Взаимоотношения между классами. Внедренные (встроенные) объекты
9.2 Указатели на методы класса
- Синтаксис описания указатели на переменные класса
Практические занятия
- Синтаксис описания указатели на методы класса
Использование указателя на методы класса при выполнении сортировки по разным признакам
10.1 Порядок конструирования и разрушения объектовТема 11. Статические члены класса
10.2 Передача параметров конструкторам встроенных объектов
- Взаимоотношения между классами.
- Понятие о внедренных объектах
10.3 Двухсвязные объектно-ориентированные списки
- Передача параметров конструкторам встроенных объектов
Практические занятия
- Приемы разработки двухсвязного объектно-ориентированного списка
Внедренные объекты.
Порядок инициализации/деактивации объектов-контейнеров.
Объектно-ориентированный однородный двухсвязный список.
11.1 Статические данные
11.2 Статические методы
- Понятие о статических данных
11.3 Порождающие функции
- Понятие о статических методах
11.4 Классы с подсчетом ссылок
- Понятие порождающих функциях
Практические занятия
- Использование статических членов класса при реализации классов с подсчетом ссылок
Односвязный список.
Обеспечение уникальности хранения данных посредством вспомогательных классов с подсчетом ссылок и статических переменных и методов класса.Тема 1. Защищенное наследование
1.1 Спецификаторы наследования private и protected.Тема 2. Множественное наследование
1.2 Ключевое слово friend и защищенное наследование.
- Отношение между классами «подобен»
- Специфика защищенного наследования.
- Использование защищенного наследования для изоляции пользователя от использования функциональности базового класса.
- Защищенное наследование при построении иерархий классов
- Использование защищенного наследования для изоляции классов потомков от использования функциональности базового класса
2.1 Отличия множественного и одиночного наследования.Тема 3. Механизм RTTI
2.2 Специфика множественного наследования
- Построение иерархий классов при множественном наследовании.
- Множественное наследование и полиморфизм
Практические занятия
- Проблемы, возникающие при множественном наследовании.
- Множественное наследование и директива using.
- Виртуальное наследование
Построение иерархий классов при множественном наследовании.
3.1 Оператор static_cast и иерархии классовТема 4. Исключительные ситуации
3.2 Динамическая идентификация типа.
- Использование оператора static_cast для определения типа на этапе компиляции применительно к классам, связанным наследованием
Практические занятия
- Оператор dynamic_cast, оператор typeid, класс type_info.
- Встроенный механизм динамического определения типа
Использование static_cast при реализации гетерогенного двухсвязного списка.
Использование механизма динамического определения типа для реализации гетерогенного двухсвязного списка.
4.1 Понятие исключительной ситуации.Тема 5. Шаблоны
4.2 Встроенные средства языка С++ для обработки исключительных ситуаций.
- Обзор способов обработки аварийных ситуаций.
4.3 Механизм обработки исключительной ситуации
- Встроенные средства С++ для обработки исключительных ситуаций: операторы try, catch, throw
4.4 Специфика обработки исключений средствами С++
- Генерация исключения и способы приема объекта-исключения обработчиком исключительной ситуации.
- Последовательность выполнения кода и выбор исключений.
- Что может предусмотреть программист в обработчике исключения.
- Исключения в конструкторах и деструкторах.
- Стандартные исключения
Практические занятия
- Function-level try-блок.
- Обработка непредусмотренных исключений.
- Спецификация исключений.
- Специфика оператора new
Использование механизма обработки исключений при реализации стека.
5.1 Идеи обобщенного программированияТема 6. Контейнеры стандартной библиотеки
5.2 Понятия, связанные с шаблонами
- Способы обобщения действий: перегрузка имен функций, макросы с параметрами.
- Зачем нужны шаблоны.
5.3 Шаблоны функций Специфика шаблонов функций.
- Использование ключевого слова template для обобщения.
- Параметры шаблона. Механизм инстанцирования.
5.4 Шаблоны классов Специфика шаблона класса.
- Специализация шаблона функции.
Практические занятия
- Специализация шаблона класса. Эмуляция шаблона «vector».
- Эмуляция шаблона «list».
- Введение понятия псевдоним типа.
- Реализация итератора для разных структур данных.
Реализация шаблона функции.
Реализация шаблона ограниченного стека посредством встроенного массива.
Реализация шаблона неограниченного стека посредством односвязного списка.
Реализация шаблона кольцевой очереди посредством динамического массива.
6.1 Базовые контейнерыТема 7. Итераторы
6.2 Адаптеры базовых контейнеров
- Обзор и примеры использования контейнеров std::vector, std::list, std::deque
6.3 Ассоциативные контейнеры
- Обзор и примеры использования контейнеров std::stack, std::queue, std:" title="Stick Out Tongue ">riority_queue
Практические занятия
- Обзор и примеры использования контейнеров std::set, std::multiset, std::map, std::multimap
Использование контейнеров std::vector, std::list, std::deque для реализации поставленных задач.
Использование контейнеров std::stack, std::queue, std:" title="Stick Out Tongue ">riority_queue для реализации поставленных задач.
Использование контейнеров std::set, std::multiset, std::map, std::multimap для реализации поставленных задач.
7.1 Понятие итератораТема 8. Обобщенные алгоритмы стандартной библиотеки
7.2 Назначение и виды итераторов
- Реализация прямых и реверсивных итераторов для разных структур данных
Практические занятия
- Итераторы-адаптеры. Потоковые итераторы. Итераторы вставки
Использование прямых и реверсивных итераторов для работы с контейнерами.
Использование потоковых итераторов для вывода элементов контейнера на экран и в файл.
Использование и итераторов вставки для манипулирования контейнерами.
8.1 Понятие обобщенного алгоритмаТема 9. Предикаты
8.2 Обзор, примеры использования и эмуляция некоторых (часто используемых) обобщенных алгоритмов стандартной библиотеки
- Цели введения обобщенных алгоритмов. Реализация обобщенного алгоритма.
Практические занятия
- Эмуляция алгоритма for_each().
- Эмуляция алгоритмов find(), find_if().
- Алгоритмы count(), count_if().
- Алгоритмы sort(), merge(), transform()
Использование алгоритма for_each() для работы с последовательностями.
Использование алгоритмов find(), find_if()) для работы с последовательностями.
Использование алгоритмов count(), count_if() для работы с последовательностями.
Использование алгоритма sort(), merge(), transform()для работы с последовательностями.
9.1 Назначение предикатов.
9.2 Предикаты, предоставляемые стандартной библиотекой.
- Способы задания предикатов
- Цель введения предикатов.
- Реализация предиката посредством глобальной функции.
- Реализация предиката посредством шаблона глобальной функции.
- Реализация предиката посредством функционального объекта.
- Реализация предиката посредством шаблона функционального объекта
Практические занятия
- Универсальный способ обобщения предиката.
- Шаблоны структур, предоставляемые стандартной библиотекой для задания предикатов.
- Использование шаблонов function и mem_fn для универсального задания пользовательского предиката
Использование предикатов стандартной библиотеки.
Разработка пользовательских предикатов.Тема 1. Введение
1.1 Обзор новых возможностей. языка С++ согласно стандарту С++11 (14, 17, 20)Тема 2. Нововведения в ядре языка.
1.2 Назначение новых возможностей.
- Преемственность от библиотеки Boost.
- Изменения в ядре языка.
- Изменения в стандартной библиотеки
- Повышение эффективности работы программы.
- Предоставление программисту удобных средств для автоматического вывода типов компилятором.
- Повышение надежности.
2.1 Сильно типизированные перечисления.Тема 3. Новые правила и возможности инициализации.
2.2 Новые стандартные суффиксы и префиксы для литералов.
- Nullptr.
- Новые фундаментальные типы.
- Проблемы использования перечислений С/С++.
- Добавление strongly typed enums.
- Проблемы при использовании неинициализированных указателей.
- Задание нулевых указателей.
- Переменная nullptr.
- Тип nullptr_t.
- Независящие от платформы и компилятора псевдонимы для целых типов.
2.3 Ключевое слово auto.
- Суффикс LL.
- Префиксы 0b, u, U
2.4 Цикл по коллекциям.
- Декомпозиция.
- Автоматическое выведение типов компилятором.
- Задание обобщенных параметров.
- Trailing return type.
- Понятие structured binding.
- Компактность и читабельность текста программы.
- Использование с массивами, структурами и кортежами.
Практические занятия
- Range based for.
- Использование с массивами и контейнерами стандартной библиотеки.
Использование strongly typed enums для обеспечения надежности и экономии памяти.
Использование auto для автоматического выведения типов.
Применение декомпозиции.
3.1 Автоматический вывод параметров шаблона при инициализации.Тема 4. Модификация контейнеров стандартной библиотеки. using
3.2 Инициализация переменных класса при объявлении.
- Упрощение синтаксиса.
- Возможность формирования «подсказок» для выведения типа компилятором (deduction guides)
3.3 Универсальная инициализация.
- Задание значений переменных «по умолчанию».
- Специфика.
- Способы инициализации членов класса.
3.4 Спецификатор decltype
- Понятие обобщенной инициализации.
- Исполь-зование обобщенной инициализации для инициализации объектов и коллекций.
- Списки инициализации при динамическом выделении памяти.
- Класс initializer_list
Практические занятия
- Правила выведения компилятором типа при использовании decltype.
- Отличия auto и decltype.
- Конструкция decltype(auto).
- Спецификатор declval
Обобщенная инициализация объектов и контейнеров.
Реализация класса с использованием initializer_list при инициализации, присваивании и в других методах.
Применение decltype при реализации шаблонов.
4.1 Дополнения функциональности контейнеров стандартной библиотеки.Тема 5. Лямбда выражения
4.2 Дополнительные возможности using.
- Методы, использующие move-семантику, конструрование «по месту», списки инициализации
Практические занятия
- Задание псевдонимов типов посредством using.
- Псевдонимы шаблона.
Применение новых возможностей стандартных контейнеров при решении типовых задач.
Использование псевдонимов шаблонов для упрощения сложных объявлений.
5.1 Лямбда функции.Тема 6. Нововведения при объявлении классов
5.2 Специфика лямбда функции.
- Синтаксис лямбда функции
- Реализация локальных действий посредством лямбда функции.
- Параметры, передаваемые лямбда функции.
- Возвращаемое лямбда функцией значение
Практические занятия
- Захват значений из внешнего контекста.
- Средства организации рекурсии посредством лямбда функции.
- Обобщенные лямбда функции.
Использование лямбда функций для решения локальных задач.
Использование лямбда функций в качестве предикатов в обобщенных алгоритмах.
6.1 Явное указание компилятору генерации методов класса по умолчанию.Тема 7. Семантика перемещения.
6.2 Запрещение неявных преобразований.
- Явная перегрузка виртуальных методов.
- Явный запрет вызова метода.
- Использование ключевого слова default для автоматической генерации компилятором метода класса.
- Использование ключевого слова override для явного указания перегруженного виртуаль-ного метода класса.
- Использование ключевого слова final для предотвращения перегрузки виртуального метода в производном классе.
- Понятие deleted.
- Использование ключевого слова delete для предотвращения вызова метода класса
Практические занятия
- Делегирующие конструкторы.
- Наследуемые конструкторы.
- Использование ключевого слова explicit для предотвращения неявных преобразований.
- Понятия наследования и делегирования инициализирующих методов.
- Синтаксис.
Разработка иерархий классов с использованием default, override, final и deleted.
Использование ключевого слова explicit.
7.1 Rvalue reference.Тема 8. Семантика продвижения типов (forwarding)
7.2 Move конструкторы копирования, move операторы присваивания
- Цель введения семантики перемещения
- Использование правосторонних ссылок для обозначения временных объектов.
- Использование семантики перемещения для повышения эффективности ПО.
7.3 Семантика перемещения и внедрение.
- Повышение эффективности программы посред-ством использования семантики перемещения для нетривиальных классов
7.4 Ссылочные квалификаторы методов.
- Семантика перемещения и наследование
- Классы с нетривиальными внедренными объектами.
- Иерархии классов с нетривиальным базовым классом
Практические занятия
- Перемещающие итераторы
- Перегрузка методов для вызова посредством временных объектов.
- Класс move_iterator.
- Шаблон make_move_iterator
Разработка нетривиальных классов с использованием семантики перемещения.
Использование семантики перемещения при внедрении.
Использование семантики перемещения при наследовании.
Использование перемещающих итераторов.
8.1 Цели введения продвижения типа Использование forward для уменьшения дублирования текста программыТема 9. Спецификатор constexpr
8.2 Универсальные ссылки.
8.3 forward при наследовании
- Вывод компилятором типа при использовании универсальных ссылок.
- Отличие от rvalue reference
8.4 forward при внедрении
- Использование forward при построении иерархий классов
Практические занятия
- Использование forward при внедрении объектов нетривиальных классов
Разработка функций с использованием forward.
Разработка классов с использованием forward.
9.1 Пользовательские литералы.Тема 10.Интеллектуальные указатели.
9.2 Спецификатор constexpr.
- Перегрузка operator””.
- Пользовательские литералы.
- Литералы, предоставляемые стандартной библиотекой: std::string_literals, std::chrono_literals
Практические занятия
- Повышение эффективности программы при использовании вычислений на этапе компиляции.
- Constexpr-функции, constexpr-«переменные», constexpr-классы. Специфика.
Реализация пользовательского литерала.
Реализация сonstexpr-функции.
Реализация constexpr-класса.
10.1 Шаблон класса unique_ptr
10.2 Шаблон класса shared_ptr.
- Использование unique_ptr для реализации концепции единоличного владения ресурсом (для надежной работы с динамически выделенной памятью, …)
10.3 Шаблон класса weak_ptr Использование weak_ptr для разрыва циклических зависимостей. Класс share_from_this
- Использование shared _ptr для совместного владения ресурсом.
Практические занятия
Реализация задания с использованием unique_ptr.
Реализация задания с использованием shared_ptr.
Реализация задания с использованием weak_ptr.Тема 1. Классы Qt для создания приложений c графическим интерфейсом
1.1 Кроссплатформенность Qt.Тема 2. Событийно-ориентированное программирование
1.2 Состав Qt. Модули Qt. Инструменты разработчика.
1.3 Иерархия классов Qt. Обзор основных классов Qt.
1.4 Директивы проекта
1.5 Виджеты и окна. Свойства виджетов. Настройка вешнего вида окон. Стандартные диалоговые окна
Лабораторные занятия
Создание приложения с графическим интерфейсом и настройка его внешнего вида.
Размеры окна. Задание размеров окна. Создание и использование диалоговых окон.
Локализация приложения средствами Qt.
2.1 Архитектура приложений, управляемых событиями.Тема 3. Мета объектная модель Qt. Механизм сигналов и слотов
2.2 Обработка событий средствами Qt. Система доставки, контроля и фильтрации событий Qt. Очередь событий Qt. Обработчики событий различных типов.
2.3 Аппаратно-независимый ввод/вывод. Реализация графического вывода средствами Qt – классы QPaintDevice и QPainter. Инструменты для «рисования». Вывод текста, векторной и растровой графики.
Лабораторные занятия
События: рисования, таймера, изменения размеров.
События мыши.
3.1 Qt как расширение С++. Мета объектный компилятор. Система динамических свойств Qt. Автоматические иерархии объектов. Именование объектов.Тема 4. Введение в архитектуру Модель-Представление-Контроллер (MVC)
3.2 Механизм сигналов и слотов. Отличия сигналов/слотов от событий. Реализация механизма сигналов/слотов. Установка соединения между объектами.
Лабораторные занятия
Взаимодействие (синхронизация) элементов управления посредством сигналов/слотов. Сигналы и слоты, предоставляемые классами Qt. Пользовательские сигналы/слоты;
Использование QtDesigner для конструирования графического приложения. Использование редактора сигналов/слотов. Использование редактора действий (QAction). Ресурсы приложения;
Класс QMainWindow. Ui. CentralWidget. Создание пользовательского виджета. Меню. ToolBar. Статусная строка
4.1 Архитектура MVC. Понятие MVC. Элементы управления, содержащие модели (QListWidget, QTableWidget, QTreeWidget, QComboBox)
4.2 Система Graphics View Framework. Понятие сцены - класс QGraphicsScene. Класс для отображения – QGraphicsView. Классы графических примитивов: QGraphicsItem. QAbstractGraphicsShapeItem. QGraphicsRectItem. QGraphicsEllipseItem.
Лабораторные занятия
Использование Qt Graphics View Framework для рисования, хранения и манипулирования примитивами.
Использование стандартных диалогов для задания атрибутов рисования. Разработка пользовательского диалога для задания атрибутов рисования.Выпускная квалификационная работа
Для просмотра содержимого вам необходимо зарегистрироваться!Для просмотра содержимого вам необходимо зарегистрироваться!
Последнее редактирование модератором:
- Статус
- В этой теме нельзя размещать новые ответы.