Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
assistance.doc
Скачиваний:
4
Добавлен:
25.09.2019
Размер:
90.62 Кб
Скачать

23 Вопрос.

Механизм позднего связывания.

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

Компилятор встраивает в каждый объект скрытый указатель на соответствующую ему таблицу виртуальных методов (ТВМ). Фактически связывание объекта с ТВМ осуществляется в процессе выполнения программы с помощью конструктора. Если вызывается виртуальная функция, сгенерированный компилятором код находит указатель на ТВФ (функций) и извлекает из нее адрес соответствующих функций. При создании объекта производного класса вначале вызывается конструктор базового класса, определяется указатель на ТВФ соответствующего базового класса, при вызове производного класса указатель на ТВФ настраивается на переопределенный вариант виртуальной функции.

24 Вопрос.

Чисто виртуальные функции и абстрактные классы.

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

Синтаксис:

virtual <тип><имя функции>(<список параметров>)=0;

где ‘=0’ – это признак чисто виртуальной функции.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]