Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ответы на контрольные вопросы по лекции 13

.docx
Скачиваний:
7
Добавлен:
20.06.2023
Размер:
16.61 Кб
Скачать

Ответы на контрольные вопросы по лекции 13

Дисциплина: объектно-ориентированное программирование

Студент: Заболотников М.Е.

Группа: 9373

  1. В чем заключается отличие раннего (статического) и позднего (динамического) связывания?

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

  1. В каком случае обращаются к механизму виртуальных методов?

К механизму виртуальных функций обращаются в тех случаях, когда в базовый класс необходимо поместить функцию, которая должна по-разному выполняться в производных классах, то есть, по-разному должна выполняться не единственная функция из базового класса, а в каждом производственном классе требуется свой вариант этой функции.

  1. В чем отличие обычных и виртуальных методов?

Интерпретация каждого вызова виртуальной функции через указатель на базовый класс зависит от значений этого указателя, то есть от типа объекта, для которого выполняется вызов. Для не виртуальной функции ее вызов через указатель считается в зависимости от типа указателя. Также виртуальными могут быть не любые функции, а нестатические компонентные функции какого-било класса.

  1. Как распространяется механизм виртуальности методов по дереву наследования? Где начало и конец виртуальности?

Наследование виртуальных функций имеет иерархический характер. После того как функция определена как виртуальная, ее повторное определение в производном классе (с тем же самым прототипом) создает в этом классе новую виртуальную функцию, причем спецификатор virtual может не использоваться.

  1. Что такое чистый метод?

Чистой виртуальной функцией называется компонентная функция, которая «ничего не делает» и недоступна для вызова.

  1. Какой класс является абстрактным?

Абстрактный класс – это класс, в котором есть хотя бы одна чистая виртуальная функция.

  1. Как распространяется абстрактность классов по дереву наследования?

Если наследование от абстрактного класса, то нужно переопределить все абстрактные методы родительского класса (кроме тех, которые имеют реализацию по умолчанию) или сделать весь дочерний класс абстрактным.

  1. Могут ли у абстрактного класса быть атрибуты и в чем их смысл, если они могут задаваться?

Абстрактный класс может иметь явно определенный конструктор. Из конструктора возможен вызов методов класса, но любые прямые или опосредованные обращения из конструктора к чистым виртуальным функциям приведут к ошибкам во время выполнения программы.