Примечание. Вызов виртуального метода, в отличие от обычного, выполняется через дополни­тельный этап получения адреса метода из таблицы VMT

Вызов виртуального метода, в отличие от обычного, выполняется через дополни­тельный этап получения адреса метода из таблицы VMT, что несколько замедляет выполнение программы.

С помощью виртуальных методов реализуется один из основных принципов объ­ектно-ориентированного программирования — полиморфизм. Это слово в пере­воде с греческого означает «много форм», что в данном случае означает «один вызов — много методов». Применение виртуальных методов обеспечивает гиб­кость и возможность расширения функциональности класса. Виртуальные методы незаменимы и при передаче объектов в методы в качестве параметров. В параметрах метода описывается объект базового типа, а при вызо­ве в нее передается объект производного класса. В этом случае виртуальные ме­тоды, вызываемые для объекта из метода, будут соответствовать типу аргумента, а не параметра.

При описании классов рекомендуется определять в качестве виртуальных те методы, которые в производных классах должны реализовываться по-другому. Если во всех классах иерархии метод будет выполняться одинаково, его лучше определить как обычный метод.

ПРИМЕЧАНИЕ -

Все сказанное о виртуальных методах относится также к свойствам и индексаторам.

Абстрактные классы

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: