在OOP中,运算符重载实际上是多态还是参数重载?

nop*_*ole 7 oop polymorphism overloading

运算符重载实际上是多态还是参数重载?

多态性通常是指响应相同"消息"(方法名称)的不同类并执行不同的操作,这是真的吗

bird.give_sound()
Run Code Online (Sandbox Code Playgroud)

car.give_sound()
Run Code Online (Sandbox Code Playgroud)

可以做不同的事情.参数重载更多的是谈论同一个类,当与消息(方法名称)一起发送的参数不同时,做不同的事情.所以

bird.give_sound()
Run Code Online (Sandbox Code Playgroud)

bird.give_sound(:frighten_sound)
Run Code Online (Sandbox Code Playgroud)

可以是不同的.

那么运算符重载是严格的参数重载?像这样:

"foo" + "bar"
"foo" + 3
Run Code Online (Sandbox Code Playgroud)

至少在Ruby中,它是将+消息发送到包含的字符串foo,第一行是用参数字符串发送,第二行是发送参数3,而且+做的事情略有不同,但它是相同的接收器类String

在以下示例中,它是多态的:

"foo" + 3
1 + 3
Run Code Online (Sandbox Code Playgroud)

因为+消息调用不同类的不同方法,但使用相同的消息名称+.那么在这两种情况下,它们是多态的,而不是运算符重载?

以上是否准确无误?是否有可能添加到其中或在上面进行纠正的内容?

Fre*_*eer 1

我将在黑暗中进行尝试并说这两者都是(但不是真的)。

每个对象都必须以特定的方式处理给定的对象(运算符右侧的对象)。对于字符串,似乎toString会使用该方法(或其他语言的等效方法)。因此,您始终会附加一个字符串(作为 传递给方法Object)。(多态性

但是,您的对象可能需要根据给定的对象执行不同的逻辑。例如,假设您有一个Student对象。您可能有该方法的一个版本,它接受一个Class对象,并将其添加到学生的课程表中。然后,您可能会遇到重载,例如需要 aBook并将其添加到学生所需阅读材料的集合中。(参数重载