Мулmnbиметод — это виртуальная функция, выбираемая при выполнении на основании типа нескольких аргументов [26]. Как сказано в главе 9, в С++ есть два вида полиморфизма: статический и динамический. Статический полиморфизм реализуется перегрузкой функций и шаблонами функций. Виртуальные функции являются воплощением механизма динамического полиморфизма.
К сожалению, два этих вида полиморфизма реализованы в С++ совсем не одинаково. Например, при перегрузке нужный вариант функции выбирается на основании всего списка параметров — они совершенно равноправны. Выбор же виртуальной функции производится по единственному — левому — аргументу. Даже синтаксис вызова виртуальной функции отдает предпочтение объекту obj перед другими аргументами:
obj.function(apryMeHTbi)
Говорят, что виртуальная функция способна выполнить одиночную диспетчеризацию. Мультиметоды — это инструмент множественной диспетчеризащи. Наиболее распространенный вариант — двойная диспетчеризация, которая означает, что нужная функция выбирается на основании типов двух аргументов. Александре-ску в [20] называет двойную диспетчеризации двойным переключением по типу.
Мультиметоды могут понадобиться в ситуациях, когда требуется выполнять некоторую операцию с различными сочетаниями типов параметров. Например,
Элджер в [25J приводит пример с операцией сложения различных чисел: целых, действительных, комплексных. Страуструп Б. в [43] описывает ситуацию, когда нужно определять пересечение различных геометрических фигур, Брюс Эккель в [И] рассматривает операцию умножения между матрицами, векторами и скалярами, а Скотт Мейерс в [24] — сталкивающиеся объекты космической игры.
Опубликовал Kest
December 03 2013 01:17:16 ·
0 Комментариев ·
3967 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.