【发布时间】:2019-01-14 01:50:58
【问题描述】:
在 C++ 中,为什么运算符重载称为“重载”?
对我来说,这更像是“覆盖”。
【问题讨论】:
-
@imm 如果它是帮助您完全理解的答案,您应该在下面选择一个答案(即标记为解决方案)。
标签: c++ operators overriding overloading
在 C++ 中,为什么运算符重载称为“重载”?
对我来说,这更像是“覆盖”。
【问题讨论】:
标签: c++ operators overriding overloading
因为您没有更改 +、-、*、/ 等相对于基本数据类型的含义。您无法更改这些对 char、short、int、float 等的含义。因此,您并没有真正覆盖任何内容。
您正在将它们的含义扩展到新的上下文,这似乎与“重载”一词相符:您已将符号加载到它们以前没有的新含义上。
【讨论】:
这是相当主观的,不容易用具体的术语来回答。
但通常我们使用“覆盖”来表示“用另一种行为替换函数的行为”,例如当您具有多态类层次结构时,并且调用其各种实现为 virtual 的函数可能会导致完全不同的行为。当然,这就是标准所指的术语。
重载不也是这样吗?的种类。但是通常当你重载一个函数时,你这样做是为了给它不同的参数列表,但仍然希望每个实现都执行相同的工作。它没有必须,但人们期望它。
与重载运算符类似,如果您要重载说 operator+,那么通常我们希望它实际上仍然只是执行正常的、传统的“加法”逻辑 - 但 重载 因此它可以新类类型的参数,而不是采用内置类型的现有重载。
在实践中,这有点不妥,因为即使是标准库,operator<< 的含义也完全不同(在其他示例中)。
不过,创建这些新运算符的实际任务是通过语言认为的函数重载完成的(特别是因为根本不涉及virtual调用)。
简而言之,可以说您并没有完全错,但它非常武断,这就是我们最终的结果。
【讨论】: