【问题标题】:C++ Operator Overloading??? Isn't it more like override? [duplicate]C++ 运算符重载???不是更像override吗? [复制]
【发布时间】:2019-01-14 01:50:58
【问题描述】:

在 C++ 中,为什么运算符重载称为“重载”?

对我来说,这更像是“覆盖”。

【问题讨论】:

  • @imm 如果它是帮助您完全理解的答案,您应该在下面选择一个答案(即标记为解决方案)。

标签: c++ operators overriding overloading


【解决方案1】:

因为您没有更改 +、-、*、/ 等相对于基本数据类型的含义。您无法更改这些对 char、short、int、float 等的含义。因此,您并没有真正覆盖任何内容。

您正在将它们的含义扩展到新的上下文,这似乎与“重载”一词相符:您已将符号加载到它们以前没有的新含义上。

【讨论】:

  • 我现在明白了。谢谢。
【解决方案2】:

这是相当主观的,不容易用具体的术语来回答。

但通常我们使用“覆盖”来表示“用另一种行为替换函数的行为”,例如当您具有多态类层次结构时,并且调用其各种实现为 virtual 的函数可能会导致完全不同的行为。当然,这就是标准所指的术语。

重载不也是这样吗?的种类。但是通常当你重载一个函数时,你这样做是为了给它不同的参数列表,但仍然希望每个实现都执行相同的工作。它没有必须,但人们期望它。

与重载运算符类似,如果您要重载说 operator+,那么通常我们希望它实际上仍然只是执行正常的、传统的“加法”逻辑 - 但 重载 因此它可以新类类型的参数,而不是采用内置类型的现有重载。

在实践中,这有点不妥,因为即使是标准库,operator<< 的含义也完全不同(在其他示例中)。

不过,创建这些新运算符的实际任务是通过语言认为的函数重载完成的(特别是因为根本不涉及virtual调用)。

简而言之,可以说您并没有完全错,但它非常武断,这就是我们最终的结果。

【讨论】:

  • 我完全理解。谢谢。
  • @imm 尽我所能!
猜你喜欢
  • 2019-10-22
  • 2011-10-27
  • 2012-12-22
  • 2016-09-26
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多