Объектно-ориентированное программирование
1. Объектно-ориентированный подход в программировании:
- Инкапсуляция
- Наследование
- Полиморфизм
2. Объектно-ориентированные средства C++:
- Перегружаемые (overload) функции
- Перегружаемые (overload) операторы
- Объектные типы данных: структуры, объединения, классы (обзор)
- Конструкторы и деструкторы (основные понятия)
- Конструкторы с параметрами
- Перегрузка конструкторов
- Производные классы
- Встраиваемые функции
- Присваивание объектов
- Передача параметров в функции и возвращение функцией объекта
- Конструктор копирования
- Указатели и ссылки на объекты
3. Наследование в языке C++:
- Модификаторы наследования
- Конструкторы при наследовании
- Деструкторы при наследовании
- Совместимость типов
4. Виртуальные функции:
- Раннее и позднее связывание
- Полиморфизм и виртуальные методы
- Использование указателей на базовые классы при адресации объектов производных классов
- Абстрактный класс
5. «Дружественные» функции:
- «Дружественные» (friend) функции
- Переопределение операторов с помощью дружественных функций
6. Шаблоны функций и классов:
- Шаблоны функций
- Шаблоны классов
Контрольные вопросы
- Какие существуют механизмы для создания новых типов?
- Парадигма ООП. Специфика интерфейса ОО программ.
- Преимущества ООП.
- Понятие класса. Отношение «объект – класс».
- Понятие полиморфизма. Проявления полиморфизма.
- Механизм наследования.
- Модификаторы доступа и наследования. Как изменяются атрибуты элементов класса при наследовании?
- Смысл инкапсуляции.
- В чем разница между struct, class и union?
- Что такое конструктор, деструктор и когда они вызываются?
- Что такое встраиваемая функция? В чем ее преимущества и недостатки?
- Какие два способа существуют для создания встраиваемой функции?
- Как можно передать в функцию в качестве аргумента адрес объекта?
- Что такое дружественная функция?
- Когда следует переопределять операторы с помощью дружественных функций, а когда с помощью функций элементов класса?
- Что происходит при присваивании одного объекта другому (без переопределенной операции =) и какие побочные эффекты могут возникнуть?
- При передаче объекта в функцию в качестве аргумента создается копия этого объекта. Изменение копии в теле функции не отражается на оригинале. Возможно ли нарушение этого правила?
- Какая функция может иметь доступ к защищенным членам одного класса? ... двух классов?
- Что такое указатель this. Приведите пример использования этого указателя.
- Что такое ссылка? Какое имеется преимущество при использовании ссылки в качестве параметра функции, а в чем недостаток? В чем разница между ссылкой и указателем?
- Назовите причины, по которым может понадобиться перегрузка конструкторов и деструкторов (в одном классе).
- Какова основная форма конструктора копирования и когда он вызывается?
- Что такое аргумент по умолчанию? Как аргумент по умолчанию связан с перегрузкой функций?
- Почему может потребоваться перегрузка оператора присваивания?
- Как можно ли изменить приоритет перегруженного оператора?
- Что такое виртуальная функция?
- Какие функции не могут быть виртуальными?
- Что такое абстрактный класс и чем может быть вызвана необходимость построений абстрактного класса?
- Чем виртуальные функции отличаются от перегружаемых?
- Раннее и позднее связывание.
- Совместимость типов. Какую роль в достижении совместимости объектов могут играть абстрактные классы?
- Почему шаблоны называют параметризованными типами?
- Когда следует в программе применять шаблоны, а когда нет?
- Чем шаблоны лучше макроподстановок?
- Для каких типов данных может применяться конкретный шаблон, а для каких нет?
- В чем разница между классом и шаблоном класса?
- Что может выступать в качестве параметра для шаблона класса?
Литература
- Шилдт Г. Самоучитель C++ / Г. Шилдт; пер. с англ. – СПб. : БХВ-Петербург, 1997. – 512с.
- Страуструп Б. Язык программирования С++ / Б. Страуструп; пер. с англ. - М. : Радио и связь, 1995. - 352с.
- Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений / Г. Буч, Роберт А. Максимчук, Майкл У. Энгл, Бобби Дж. Янг, Джим Коналлен, Келли А. Хьюстон. – Вильямс, 2008. – 720с.
- Чернышов М.К. Введение в объектно-ориентированное программирование (с примерами на C++). I часть (учебно-методическое пособие) // М.К. Чернышов. Воронеж : ИПЦ ВГУ, 2006. – Тираж 50. – 54 с.
- Чернышов М.К. Основы языка программирования C++ с применением технологии объектно-ориентированного программирования (учебно-методическое пособие) // М.К. Чернышов. Воронеж: ИПЦ ВГУ, 2007. – 72с.