【问题标题】:Why Operator overloading and not Operator Overriding?为什么运算符重载而不是运算符覆盖?
【发布时间】:2020-07-14 12:03:14
【问题描述】:

重载就是定义多个同名但参数个数不同、参数数据类型不同的方法

重写是在其派生类中重新定义基类函数,具有相同的签名,即返回类型和参数

对于运算符,某些方法必须在基类中定义,当我们在类中重新定义这些方法时,我们称它们为运算符重载。但是,它不应该被称为运算符覆盖吗?另外,我们不能更改方法的参数,那么运算符重载不是更类似于覆盖吗?
我真的对这个非常基本的事情感到困惑。

【问题讨论】:

  • 您可能想要指定一种语言,以便答案可以提及特定于该语言的内容并且更有用。我确信许多语言处理运算符重载的方式不同。

标签: oop


【解决方案1】:

它不是压倒一切的,因为您没有更改现有运算符的功能。例如,您无法更改 1 + 1 对运算符重载的作用。

运算符重载允许您做的是定义新的运算符。例如,您可以定义一个对两个 int 数组进行操作的 +(假设您的语言尚不支持此功能)。如果您将+ 运算符视为一个函数,那么现有的+ 运算符可能具有签名:

double +(double, double)
int +(int, int)
string +(string, string)

现在您正在添加一个新的运算符:

int[] +(int[], int[])

这些“函数”都具有相同的名称+,但参数不同。这与重载中的情况类似,所以语言特性称为运算符重载。

【讨论】:

    最近更新 更多