Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
17.03.2024
Размер:
18.17 Кб
Скачать

1. Языки программирования С и С++.

Краткая история C и C++. Эффективность программ на C++. Сложности программирования на C++. Превращение кода в программу: компиляция и линковка. Структура программы на C/C++: файлы кода и заголовочные файлы. Макросы для защиты от повторного включения заголовочного файла. Зависимости между частями программы.

2. Принципы работы разработанного программного обеспечения.

Во что превращается программный код в исполняемом файле. Структура исполняемой программы. Раздел кода, раздел данных. Использование памяти в работающей программе. Стек и куча. Как передаются параметры функции. Где оказываются переменные. Что происходит при линковке.

3. Указатели и ссылки.

Передача параметра с помощью указателя. Взятие адреса переменной и, наоборот, значения по адресу. Неинициализированные указатели. Нулевой указатель. Массивы и указатели. Арифметика указателей. Потенциальные проблемы при использовании указателей. Ссылки. Сходство с ссылок с указателями и их отличия. Как хранятся ссылки. lvalue и rvalue.

4. Динамическая память

Язык C: malloc/calloc/realloc/free. Язык C++: new/ delete и new[]/ delete[]. Почему нужны 2 набора операторов. Потенциальные проблемы. Вопросы производительности. Двумерные массивы. Ввод-вывод в C и C++.

5. Структуры. Част 1.

Идея инкапсуляции. Конструктор и деструктор. Поля и методы. Определение класса в .hpp и в .cpp. Класс самоуправляющегося массива. Автоматический вызов деструктора. Об опасности неожиданного завершения программы.

6. Структуры. Част 2.

Различия между malloc/free и new/delete. Конструктор копирования. Проблемы с присваиванием объектов. Как запретить присваивание. Ограничение прав доступа к членам класса. Почему все поля должны быть private? Какие методы стоит делать public? Принцип ``всегда целого'' объекта. Placement new.

7. Инициализация и const.

Потенциальная проблема: неинициализированные переменные. Возможности инициализации в конструкторе. Другая проблема — случайное изменение переменных. Решение: константные поля. Констатные методы. Константное возвращаемое значение. Заразность const. Идея возвращения значения по ссылке. Возможность создания парных методов const/не-const. Константность this. Ключевое слово mutable.

8. Наследование, перегрузка, переопределение

Идея расширения типа. Наследование. Неявное приведение типов. protected. Ещё раз о перегрузке. Переопределение методов. Виртуальные методы. Таблица виртуальных методов. Виртуальные методы в конструкторе и деструкторе.

9. Объектно-ориентированное программирование.

Основные идеи ООП. Различия между наследованием и агрегированием. Особенности наследования в C++. Ключевое слово friend.

10. Перегрузка операторов.

Перегрузка операторов. Какие операторы можно перегружать. Стандартная семантика операторов. Приоритеты операций. Как правильно реализовывать + через +=. Перегрузка &&, ||, ‘,’ . Перегрузка [] и ().

11. Ключевые слова static и inline.

Ключевое слово inline. Вопросы производительности. Статические ``глобальные'' переменные. Статические локальные переменные. Статические функции. Статические члены класса. Необходимость инстанциации статических полей. Code conventions.

12. Указатели на функции и члены классов

Указатели на функции. Указатели на методы. Указатели на члены данных. Использование указателей на функции в качестве функторов. Пример использование указателей на методы — паттерн Listener.

13. Шаблоны. Часть 1. Умные указатели.

Шаблоны функций и классов. Вывод шаблонных параметров из аргументов функций. Шаблоны конструкторов и обычных методов. Компиляция шаблонов. Почему их нужно определять в заголовочных файлах. Аргументы шаблонов по умолчанию.

Концепция RAII. scoped_ptr, unique_ptr/auto_ptr, shared_ptr, intrusive_ptr, linked_ptr, weak_ptr.

14. Шаблоны. Часть 2.

Специализация шаблонов. Отличие специализации от перегрузки. Частичная специализация шаблонов. Нетиповые шаблонные параметры. Использование зависимых имён (использование typename).

Все указанные темы и их подразделы должны быть проиллюстрированы соответствующими синтаксическими конструкциями (примеры кодов) в формате общий шаблон и пример.  Необходимо приводить примеры для основных понятий.

При подготовке доклада с презентацией нужно следовать следующим требованиям:

  1. Для одной темы презентация должна содержать более 30 слайдов. Текст доклада, поясняющий слайды, может быть объемным и высылается отдельным файлом на предварительную проверку.

  2. Длительность доклада одной темы порядка 60 минут, может быть несколько докладчиков (количество докладчиков зависит от объема темы).

  3. На слайдах нужно показывать только определения, концепции и основные понятия нужно приводить тезисно.

  4. Желательно на слайдах представлять рисунки, схемы и сравнительные таблицы, синтаксические конструкции (примеры кодов) в формате общий шаблон и пример.

Выберите, кто какую тему будет разрабатывать. Пришлите список бригад с ФИО участников.