Программа курса:
Модуль 1.
· Концепция объектно-ориентированного программирования.
· Отличия процедурного и ООП. Концепция классов в С++.
· Понятие класса. Объявление класса. Данные-члены класса + функции-члены класса = инкапсуляция. Оператор sizeof и размер класса.
· Спецификаторы доступа. Создание экземпляра класса.
· Реализация методов класса. Доступ к public членам класса посредством объекта, селектор «.».Указатель this.
· Анатомия вызова нестатического метода класса.
· Ключевое слово сonst и методы класса.
· Методы, возвращающие константные значения. Константные методы класса. Ключевое слово mutable Константные аргументы.
· Конструктор класса. Понятие конструктора. Конструктор по умолчанию. Конструктор с параметрами. Перегрузка конструкторов. Конструктор с параметрами по умолчанию. Возможные конфликты при использовании параметров по умолчанию. Специфика записи при вызове конструктора с одним параметром. Конструкторы и модификатор explicit. Конструкторы базовых типов. Динамическое создание объектов и вызов конструктора.
· Деструктор.
· Специфика объявления деструктора как метода класса. Деструктор – метод класса. Конструктор + деструктор = функциональное замыкание.
· Создание и уничтожение объектов с разным способом хранения.
Модуль 2.
· Конструктор копирования.
· Создание нового объекта по существующему объекту. Передача объектов в качестве параметров функции. Возвращение объекта по значению. Move конструктор копирования (новый стандарт С++11).
· Проблемы, которые могут возникнуть при использовании конструктора копирования по умолчанию и способы их решения.
· Указатель на класс.
· Указатель на объект класса. Доступ к членам класса посредством указателя. Селектор «->». Указатель this.
· Массивы и классы. Массивы объектов класса. Массивы указателей на объекты класса.
· Поля битов. Специфика использования.
· Взаимоотношения между классами. Наследование.
· Виды наследования. Простое (single) наследование. Объявление производного класса. Спецификатор protected в базовом классе.
· Спецификаторы наследования. Порядок вызова конструкторов и деструкторов. Передача параметров базовому классу при конструировании.
· Специфика передачи параметров конструктору копирования базового класса.
Модуль 3.
· Открытое наследование. Правила объектно-ориентированного проектирования. Пример ошибочного построения иерархии классов.
· Полиморфизм. Раннее и позднее связывание. Виртуальные функции. Механизм вызова виртуальной функции. Виртуальные деструкторы. Чисто виртуальные функции и абстрактные классы. Наследование интерфейса и наследование реализации при открытом наследовании.
· FRIEND (привилегированные) функции и классы.
· Внешняя friend-функция. Friend-функция, являющаяся методом другого класса. Friend-класс.
Модуль 4.
· Перегрузка операторов. Перегрузка операторов для базовых и пользовательских типов. Правила перегрузки унарных и бинарных операторов. Порядок поиска компилятором функции. Формы перегрузки операторов. Перегрузка оператора с помощью метода класса. Перегрузка с помощью метода класса. Специфика перегрузки оператора присваивания. Move оператор присваивания (новый стандарт С++11). Оператор присваивания и нетривиальные классы. Оператор присваивания и перегрузка. Оператор[] с проверкой выхода за границы массива. Оператор ++ (--).Оператор () и функциональные объекты.
· Перегрузка с помощью глобальной friend-функции. Пример перегрузки оператора << (вывод) в библиотечный ostream.
· Внедряемые объекты.
· Конструирование и уничтожение встроенных объектов. Передача параметров конструктора встроенным объектам. Список инициализации.
· Специфика инициализации константных объектов и ссылок. Порядок инициализации членов класса. Пример «ассоциативного массива». Указатели на объекты в качестве членов данных класса. Предварительное неполное объявление класса (forward reference). Ссылки на указатели.
Модуль 5.
· Статические члены класса.
· Ключевое слово static. Статические данные. Статические функции: для доступа извне к private или protected static-данным класса, для «косвенного» создания объекта.
· Структуры и объединения языка C++.
· Ключевые слова struct и union. Отличия структур и классов.
Рекомендации по использованию Тип данных VARIANT. Анонимные объединения.
· Множественное наследование.
· Создание объектов производных классов при множественном наследовании. Полиморфизм и множественное наследование. Проблемы, возникающие при множественном наследовании.
Практическое занятие 1.
· ООП. Объявление класса. Создание экземпляра класса. Вызов методов класса посредством объекта.
· Конструктор по умолчанию. Перегрузка конструкторов и методов класса.
· Конструктор копирования. Спецификаторы доступа. Инкапсуляция.
· Передача экземпляра класса в качестве параметра функции (по значению, по ссылке). Возвращение объекта класса по значению.
· Указатель на класс. Использование селектора «->».
· «Нетривиальные» классы. Конструктор + деструктор = функциональное замыкание. Конструктор копирования для нетривиальных классов.
· Массив объектов класса. Массив указателей на объекты класса.
· Индивидуальное домашнее задание по пройденному материалу N1
Практическое занятие 2.
· Простое наследование. Аргументы конструктора, передаваемые в базовый класс.
· Виртуальные функции.
· Виртуальные деструкторы.
· Оператор разрешения области видимости и наследование.
· Абстрактный базовый класс.
· Перегрузка операторов.
· Перегрузка операторов с помощью глобальных friend-функций.
· Перегрузка операторов с помощью методов класса.
· Индивидуальное домашнее задание по пройденному материалу N2
Практическое занятие 3.
· Внедренные объекты класса. Передача параметров при конструировании внедренных объектов.
· Реализация двухсвязного объектно-ориентированного списка.
· Индивидуальное домашнее задание по пройденному материалу N3
Практическое занятие 4.
· Статические члены класса. Производящие функции. Защищенный конструктор.
· Реализация контроля за всеми созданными объектами посредством статических данных и статических методов базового класса.