- •Тема 1: Динамическая память и интеллектуальные указатели
- •1. Особенности использования динамической памяти (распределяемая память, heap, freestore), стека. Примеры использования.
- •2. Особенности выделения и освобождения памяти для автоматических глобальных и локальных объектов, статических глобальных и локальных объектов. Примеры использования.
- •3. Операторы new и delete при работе с динамической памятью. Свойства указателей, передаваемых оператору delete. Примеры использования.
- •4. Утечка памяти (memory leak). Потерянный указатель (dangling pointer, wild pointer). Примеры использования.
- •5. Проблемы, связанных с использованием операторов new и delete при управлении динамической памятью. Примеры использования.
- •6. Динамически создаваемые объекты (dynamically allocated objects). Интеллектуальные указатели (smart pointers): преимущества, недостатки, особенности использования, различия. Примеры использования.
- •8. Класс интеллектуального указателя shared_ptr. Методы класса указателя shared_ptr. Особенности и примеры использования.
- •9. Копирование и присваивание указателей shared_ptr. Примеры использования.
- •10. Создание и использование объектов интеллектуальных указателей. Примеры.
- •11. Функция make_shared(). Использование функции make_shared() для создания и инициализации объектов интеллектуальных указателей. Примеры использования.
- •12. Счетчик ссылок (reference count), счетчик слабых ссылок (weak count), функция-удалитель (deleter), выделитель памяти (allocator). Примеры использования.
- •13. Использование ключевого слова auto. Примеры использования.
- •14. Классы, ресурсы которых имеют динамическую продолжительность существования. Случаи их использования. Совместное использование данных двумя объектами. Примеры использования.
- •15. Использование оператора new для динамического резервирования памяти и инициализации объектов. Примеры использования.
- •17. Особенности создание пользовательского класса умного указателя (smart pointer). Перечень необходимых условий для реализации пользовательского класса умного указателя. Пример использования.
- •18. Особенности копирования, присваивания и удаления объектов при создании пользовательского класса умного указателя (smart pointer). Пример использования.
- •19. Размещающий оператор new (placement new). Передача ему объекта nothrow. Пример использования.
- •20. Особенности исчерпания памяти. Исключения, возникающие при исчерпании памяти. Пример использования.
- •21. Время жизни динамически создаваемых объектов. Примеры использования.
- •22. Присваивание указателю значения nullptr. Примеры использования.
- •23. Использование указателя shared_ptr совместно с оператором new. Примеры использования.
- •24. Особенности совместного использования обычных указателей и интеллектуальных. Примеры использования.
- •30. Передача в функцию и возврат из функции указателя типа unique_ptr. Примеры использования.
- •31. Использование класса auto_ptr. Особенности и пример использования.
- •32. Передача функции удаления указателю unique_ptr. Примеры использования.
- •33. Класс интеллектуального указателя weak_ptr. Методы класса указателя weak_ptr. Особенности и пример использования.
- •34. Динамические массивы. Особенности работы с динамическими массивами. Особенности резервирования памяти для массивов. Динамическое резервирование пустого массива. Примеры использования
- •35. Оператор new и динамические массивы. Класс bad_array_new_length. Примеры использования.
- •36. Инициализация массива динамически созданных объектов встроенных и пользовательских типов. Примеры использования.
- •37. Особенности освобождение памяти, выделенной для динамических массивов. Примеры использования.
- •38. Взаимодействие интеллектуальных указателей (класс unique_ptr) и динамических массивов. Примеры использования.
- •39. Класс Allocator и специальные алгоритмы. Примеры использования.
- •40. Алгоритмы копирования и заполнения неинициализированной памяти. Примеры использования
- •1. Особенности обработки исключительных ситуаций с использованием функции abort() и exit(). Преимущества и недостатки. Примеры использования.
- •2. Особенности обработки исключительных ситуаций с помощью возврата кода ошибки. Преимущества и недостатки. Примеры использования.
- •4. Роль типа исключения в его обработке. Охранный блок, блок перехвата. Использование механизма обработки исключений. Примеры использования.
- •5. Использование объектов классов в качестве исключений. Одинаковые свойства и различия операторов throw и return. Примеры использования.
- •7. Алгоритм раскручивания стека. Раскручивание стека при нормальном и аварийном завершении программы. Пример использования.
- •8. Понятие абсолютного обработчика, его синтаксис, особенности использования. Пример использования.
- •9. Класс exception. Методы класса exception. Использование наследования класса exception. Пример использования.
- •11. Исключение bad_alloc и операция new. Примеры использования. Использование нулевого указателя и операции new. Примеры использования.
- •12. Использование исключений вместе с классами и наследованием. Особенности использования вложенных классов.
- •13. Потеря исключений. Неперехваченное исключение. Использование функций terminate() и set_terminate().
- •14. Непредвиденное исключение. Использование функций unexpected() и set_unexpected(). Исключение типа std::bad_exception.
- •15. Предостережения относительно использования исключений. Использование и управление исключениями в современных языках программирования.
- •4. Изменение основания системы счисления, используемого для отображения данных. Набор констант типа fmtflags (константы форматирования), решаемые ими задачи.
- •7. Istream как псевдоним шаблона класса basic_istream. Взаимосвязь основных классов ввода/вывода. Ввод данных с помощью объекта cin
- •Istream и ostream как специализации для специализаций char. Wistream и wostream как специализации для типа wchar_t.
- •10. Класс basic_iostream. Iostream как псевдоним шаблона класса basic_iostream. Взаимосвязь основных классов ввода/вывода
- •12. Объекты wcout, wcin, wclog, wcerr, cout, cin, clog, cerr. Особенности их создания и использования.
- •14. Заголовочный файл iomanip. Функции setprecision(), setfill(), setw(). Использование манипуляторов из файла iomanip.
- •Тема 4: Файловый ввод-вывод
- •Понятие файла. Бинарные и текстовые файлы. Преимущества, недостатки, особенности использования.
- •Аргументы командной строки (argc, argv). Обработка данных командной строки. Примеры их использования.
- •Проверка состояния файлового потока. Метод is_open(). Особенности открытия нескольких файлов. Пример их использования.
- •Константы типа seekdir: ios_base::beg, ios_base::cur, ios_base::end. Примеры их использования.
- •Особенности работы с временными файлами. Функция tmpnam_s(). Пример её использования.
- •Класс string. Внутреннее форматирование с использованием классов ostringstream, istringstream. Примеры их использования.
- •Тема 5: Стандартная библиотека шаблонов stl.
- •1. Базовые принципы библиотеки шаблонов stl. Использование библиотеки stl. Заголовочные файлы complex, random.
- •4. Иерархия и концепция итераторов. Необходимость использования каждого типа итераторов. Указатель как итератор. Применение алгоритмов stl к контейнерам, не относящимся к библиотеке stl.
- •5. Входные, выходные, однонаправленные, двунаправленные итераторы, итераторы произвольного доступа: понятие, требования, особенности использования, направленность.
- •6. Шаблонный класс vector, deque, stack. Особенности, методы, принципы работы, возможности
- •7. Шаблонный класс array, valarray. Особенности, методы, принципы работы, возможности
- •8. Шаблонный класс list, forward_list. Особенности, методы, принципы работы, возможности
- •9. Шаблонный класс queue, priority_queue. Особенности, методы, принципы работы, возможности
- •10. Шаблонные классы set и multiset. Особенности, методы, принципы работы, возможности
- •11. Шаблонные классы map и multimap. Особенности, методы, принципы работы, возможности
- •12. Понятие функциональных объектов (функторов). Концепции функторов: генератор, унарная функция, бинарная функция, предикат, бинарный предикат. Предопределенные функторы
- •14. Группы алгоритмов. Алгоритмы «по месту», копирующие алгоритмы. Сравнение функций stl и методов контейнеров stl
- •15. Математические операции и их эквиваленты-функторы. Понятие полного упорядочения и квазиупорядочения
- •17. Понятие обобщенного программирования. Связь обобщенного программирования и библиотеки stl.
- •18. Использование алгоритма copy(), классов ostream_iterator и istream_iterator в качестве моделей входных и входных итераторов
- •19. Итераторы специального назначения: reverse_iterator, back_insert_iterator, front_insert_iterator, insert_iterator
- •Тема 6: Обзор Java. Введение в ооп в Java.
- •2. Обзор и отличительные особенности языка Java. Программная платформа и виртуальная машина Java. Особенности разработки и исполнения объектно-ориентированных приложений на Java.
- •3. Сборка мусора в Java. Пакет jdk: особенности, содержимое, необходимость использования, версии. Ide для работы на Java.
- •4. Особенности настройки работы платформы Java и запуск приложения на языке Java без ide.
- •5. Особенности лексики Java: литералы, идентификаторы, разделители, комментарии, ключевые слова.
- •6. Примитивные типы данных Java. Типизация. Целые числа (byte, short, int, long), числа с плавающей точкой (float, double), символы.
- •7. Переменные. Объявление переменной. Преобразование и приведение типов. Автоматическое приведение и продвижение типов в выражениях. Логические выражения. Область и срок действия переменной.
- •8. Операции (арифметические, поразрядные, отношения, логические (укороченные, обычные)). Операция присваивания. Предшествование операций.
- •9. Управляющие операторы (выбора, цикла, перехода). Разновидность цикла for в стиле for each. Комментарии в Java. Оператор instanceof.
- •Принципы объектно-ориентированного программирования в Java.
8. Операции (арифметические, поразрядные, отношения, логические (укороченные, обычные)). Операция присваивания. Предшествование операций.
Операнды арифметических операций должны иметь числовой тип. Арифметические операции нельзя выполнять над логическими типами данных, но допускается над типом char, посколько в Java этот тип по существу является разновидностью типа int.
Логические операции
Эти вторые версии логических операций И и ИЛИ обычно называются укороченными логическими операциями. Результат выполнения укороченной логической операции ИЛИ равен true, когда значение операнда А равно true независимо от значения операнда В. Аналогично результат выполнения укороченной логической операции И равен false, когда значение операнда А равно false независимо от значения операнда В. При использовании форм || и && этих операторов вместо форм | и & в программе нa Java не будет вычисляться значение правого операнда, если результат выражения можно определить по значению только левого операнда. Этим обстоятельством очень удобно пользоваться в тех случах, когда значение правого операнда зависит от значения левого.
ПРЕДШЕСТВОВАНИЕ ОПЕРАЦИЙ
Операции с двумя операндами имеют порядок вычисления слева направо (за исключением операции присваивания, которая выполняется справа налево). Формально скобки [] и (), а также точка (.) считаются разделителями, но они мог служить и в качестве операций.
ПОРАЗРЯДОВЫЕ
Операторы присваивания
9. Управляющие операторы (выбора, цикла, перехода). Разновидность цикла for в стиле for each. Комментарии в Java. Оператор instanceof.
ОПЕРАТОРЫ ВЫБОРА В языке Java подерживаются два оператора выбора: if и switch. Эти операторы позволяют управлять порядком выполнения команд программы в соответствии с условиями, которые известны только во время выполнения.
УСЛОВНЫЙ ОПЕРАТОР IF Это оператор условного ветвления программы нa Java. Его можно использовать с целью направить выполнение программы по двум разным ветвям. if (условие) оператор1; else оператор2; где каждый оператор обозначает одиночный или составной оператор, заключенный в фигурные скобки (т.е. блок кода); условие – любое выражение, возвращающее логическое значение типа boolean. А оператор else указывать необязательно
ОПЕРАТОР SWITCH В языке Java оператор switch является оператором ветвления. Он предоставляет простой способ направить поток исполнения команд по разным ветвям кода в зависимости от значения управляющего выражения. Начиная с JDК 7, выражение может также иметь тип String. Каждое значение, определенное в операторах ветвей case, должно быть однозначным константным выражением (например, литеральным значением).
ОПЕРАТОРЫ ЦИКЛА Для управления циклами, в Java предоставляются операторы for, while и do-while. Оператор цикла while и do-while являются основополагающим для организации циков в Java. Начиная с версии JDK 5, в Java имеются две формы оператора цикла for. Первая форма считатся традиционной и появилась еще в исходной версии Java, а вторая – более новая форма цикла в стиле for each.
ОПЕРАТОРЫ ПЕРЕХОДА В языке Java определены три оператора перехода: break, continue и return. Они передают непосредствнное управление другой части программы. Кроме операторов перехода в Java поддерживается еще один способ изменения порядка выполнения инструкций программы, который состоит в обработке исключений. Обработка исключений предоставляет структурирванный механизм, с помощью которого можно обнаруживать и обрабатывать ошибки во время выполнения программы. Для поддержки этого механизма служат ключевые слова throw, throws, try, catch, и finally.
ПРИМЕНЕНИЕ ОПЕРАТОРА BREAK В языке Java оператор break находит три применения. Во-первых, он завершает последовательность операторов в операторе switch. Во-вторых, его можно использовать для выхода из цикла. И в-третьих, этот оператор можно применять в качестве "цивилизованной" формы оператора безусловного перехода goto.
ПРИМЕНЕНИЕ ОПЕРАТОРА CONTINUE Иногда требуется, чтобы повторение цикла осуществлялось с пропуском какой-то части цикла. Это означает, что на данном конкретном шаге может возникнуть потребность продолжить выполнение цикла без выполнения остального кода в его теле
ОПЕРАТОР RETURN Оператор return служит для выполнения явного выхода из метода, т.е. снова передает управление объекту, который вызвал данный метод. Оператор return можно использовать в любом месте метода для возврата управления тому объекту, который вызвал данный метод.
РАЗНОВИДНОСТЬ ЦИКЛА FOR В СТИЛЕ FOR EACH Начиная с версии JDК 5, в Java можно использоват вторую форму цикла for, реализующую цикл в стиле for each. Цикл в стиле for each предназначен для строго последовательного выполнения повторяющихся действий над коллекцией объектов. В отличие от некоторых языков, подобных С#, где для реализции циков в стиле for each используется ключевое слово foreach, в Java возможность организации такого цикла реализована путем усовершенствования цикла for. Примущество такого подхода состоит в том, что для его реализции не требуется дополнительное ключевое слово, а уже существующий код не нарушается.
КОММЕНТАРИИ
// однострочный комментарий;
/* многострочный комментарий */
/** комментирование документации */
Оператор instanceof
Иногда тип объекта полезно выяснить во время выполнения программы. Например, в одном потоке исполнения объекты разных типов могут формироваться, а в другом потоке исполнения – использоваться. В таком случае удобно выяснить тип каждого объекта, получаемого в обрабатывающем потоке исполнения. Тип объекта во время выполнения не менее важно выяснить и в том случае, когда требуется приведение типов .
где e обозначает ссылку на экземпляр класса, а тип – конкретный тип этого класса, например, Manager или Engineer. Если ссылка на объект относится к указанному типу или может быть приведена к нему, то вычисление оператора instanceof дает в итоге логическое значение true, а иначе – логическое значение false.
Таким образом, оператор instanceof – это оператор, с помощью которого программа может получить сведения о типе объекта во время выполнения.