В ООП, является ли перегрузка оператора полиморфизмом или перегрузкой параметров?

является перегрузкой оператора на самом деле полиморфизмом или перегрузкой параметров?

Верно ли, что полиморфизм обычно относится к разным классам, отвечающим на одно и то же «сообщение» (имя метода) и выполняющим разные действия, поэтому

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

, потому что + message вызывает разные методы разных классов, но использует одно и то же имя сообщения + . Значит, в этих двух случаях это полиморфизм, а не перегрузка оператора?

Верно ли и верно ли сказанное выше? Есть ли что-то, что можно было бы добавить или исправить выше?

7
задан nopole 28 March 2011 в 13:09
поделиться