является ли перегрузка оператора фактическим полиморфизмом или перегрузкой параметров?
Правда ли, что полиморфизм обычно ссылается на разные классы, отвечающие на одно и то же «сообщение» (имя метода), и делает разные вещи, поэтому
bird.give_sound()
и
car.give_sound()
могут делать разные вещи.А перегрузка параметров - это больше разговоры об одном и том же классе, о разных вещах, когда параметры, отправляемые вместе с сообщением (именем метода), отличаются.Так что
bird.give_sound()
и
bird.give_sound(:frighten_sound)
могут быть разными.
То есть перегрузка операторов является строго перегрузкой параметров?например:
"foo" + "bar"
"foo" + 3
по крайней мере в Ruby, он отправляет сообщение +
в строку, содержащую foo
, первая строка отправляет строку параметра, вторая отправляетпараметр 3 и +
делают немного разные вещи, но это тот же класс получателя String
В следующем примере это полиморфизм:
"foo" + 3
1 + 3
, потому что *Сообщение 1029 * вызывает различные методы разных классов, но с одним и тем же именем сообщения +
.Таким образом, в этих двух случаях это полиморфизм, а не перегрузка операторов?
Является ли приведенное выше точным и правильным?Есть ли что-то, что может быть добавлено или исправлено выше?