操作符重载实际上是多态性还是参数重载?
多态性通常引用不同的类来响应相同的“消息”(方法名)并做不同的事情,这是真的吗?
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因为+消息调用不同类的不同方法,但使用相同的消息名称+。所以在这两种情况下,它们是多态的,而不是操作符重载?
以上内容是否准确正确?上面有没有什么可以添加或更正的地方?
发布于 2011-03-28 21:23:11
感谢您在评论中对上下文的澄清。是的,我会说你是对的。
简而言之,尽可能简短地总结……
给定相同的方法名(或"message"):
发布于 2011-03-28 21:15:45
我将在黑暗中试一试,并说这是一种(但不是真正的)两者。
每个对象必须以特定的方式处理给定的对象(操作符右侧的对象)。对于字符串,似乎会使用toString方法(或其他等效语言)。因此,您将始终附加一个字符串(作为Object传递给方法)。(Polymorphism)
但是,您的对象可能需要根据给定的对象执行不同的逻辑。例如,假设您有一个Student对象。您可能有一个版本的方法,它接受一个Class对象,并将其添加到学生的课表中。然后,您可能会有一个重载,例如,获取一个Book并将其添加到学生的必需阅读材料集合中。(参数重载)
发布于 2011-03-28 21:21:55
多态性是指一种数据类型动态地表现为另一种数据类型。(动态类型转换)
Shape
Qudrilateral
Rect
Rhombus
Elliptoid
Oval
Circle多态性是自动为给定的对象上下文选择适当的area()方法
操作符重载是指为方法上下文选择正确的面积方法(即传递的参数数量或传递的参数类型),因此如果Rect有两个面积方法,一个接受一个参数(正方形),另一个接受两个参数(任何其他矩形)
因此,根据使用上下文,为给定对象定义运算符可能会导致多态或运算符重载。
https://stackoverflow.com/questions/5459381
复制相似问题