Многократная отправка - это когда выполняемая функция зависит от типа времени выполнения более одного объекта.
C ++ имеет одну отправку, потому что при использовании виртуальных функций фактическая функция, которая запускается, зависит только от типа времени выполнения объекта слева от -> или. оператор.
Я изо всех сил пытаюсь придумать реальный программный пример для множественной отправки. Может быть, в игре, где разные персонажи сражаются друг с другом.
void Fight(Opponent& opponent1, Opponent& opponent2);
Победитель боя может зависеть от характеристик обоих противников, поэтому вы можете захотеть, чтобы этот вызов отправлял одно из следующих, в зависимости от типов обоих аргументов во время выполнения:
void Fight(Elephant& elephant, Mouse& mouse)
{
mouse.Scare(elephant);
}
void Fight(Ninja& ninja, Mouse& mouse)
{
ninja.KarateChop(mouse);
}
void Fight(Cat& cat, Mouse& mouse)
{
cat.Catch(mouse);
}
void Fight(Ninja& ninja, Elephant& elephant)
{
elephant.Trample(ninja);
}
// Etc.
То, что делает функция, зависит от типов обоих аргументов, а не только от одного. В C ++ вам, возможно, придется написать это как некоторые виртуальные функции. Виртуальная функция будет выбрана в зависимости от одного аргумента (указатель this). Тогда виртуальная функция может нуждаться в переключателе или чем-то еще, чтобы сделать что-то конкретное с другим аргументом.