Практикум по объектно-ориентированному программированию на базе языка с++ Учебно-методическое пособие



Pdf көрінісі
бет23/44
Дата21.02.2024
өлшемі0.49 Mb.
#492719
түріПрактикум
1   ...   19   20   21   22   23   24   25   26   ...   44
ООП С

Механизм позднего связыванияДля каждого класса (не объекта!), 
содержащего хотя бы один виртуальный метод, компилятор создает таб-
лицу виртуальных методов (vtbl), в которой для каждого виртуального
метода записан его адрес в памяти. Адреса методов содержатся в таблице
в порядке их описания в классах. Адрес любого виртуального метода имеет 
в vtbl одно и то же смещение для каждого класса в пределах иерархии. 
Каждый объект содержит скрытое дополнительное поле ссылки на 
vtbl, называемое vptr. Оно заполняется конструктором при создании объ-
екта (для этого компилятор добавляет в начало тела конструктора соответ-
ствующие инструкции). На этапе компиляции ссылки на виртуальные ме-
тоды заменяются на обращения к vtbl через vptr объекта, а на этапе выпол-
нения в момент обращения к методу его адрес выбирается из таблицы. 
Таким образом, вызов виртуального метода, в отличие от обычных методов 
и функций, выполняется через дополнительный этап получения адреса
метода из таблицы. Это несколько замедляет выполнение программы. 
Рекомендуется делать виртуальными деструкторы для того, чтобы 
гарантировать правильное освобождение памяти из-под динамического 


43 
объекта, поскольку в этом случае в любой момент времени будет выбран 
деструктор, соответствующий фактическому типу объекта. 
Четкого правила, по которому метод следует делать виртуальным, 
не существует. Можно дать рекомендацию объявлять виртуальными
методы, для которых есть вероятность, что они будут переопределены
в производных классах.
Методы, которые во всей иерархии останутся неизменными (1)
которыми производные классы пользоваться не будут (2), делать вирту-
альными нет смысла. С другой стороны, при проектировании иерархии 
не всегда можно предсказать, каким образом будут расширяться базовые 
классы, а объявление метода виртуальным обеспечивает гибкость и воз-
можность расширения. 
Виртуальный механизм работает только при использовании указа-
телей или ссылок на объекты. Объект, определенный через указатель или 
ссылку и содержащий виртуальные методы, называется полиморфным. 
В данном случае полиморфизм состоит в том, что с помощью
одного и того же обращения к методу выполняются различные действия 
в зависимости от типа, на который ссылается указатель в каждый момент 
времени. 


Достарыңызбен бөлісу:
1   ...   19   20   21   22   23   24   25   26   ...   44




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет