C ++运算符重载???它不是更像是覆盖吗?

时间:2019-01-14 01:50:58

标签: c++ operators override overloading

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

在我看来,这更像是“替代”。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

这是非常主观的,并且用特定的术语很难回答。

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

这不是超载还会发生的情况吗?的种类。但是通常,当您重载一个函数时,您可以给它提供不同的参数列表,但是仍然希望每个实现都执行相同的工作。它没有必须,但是有人希望这样做。

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

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

仍然,创建这些新运算符 的实际任务是通过该语言认为是函数 overloading 来完成的(尤其是不涉及任何virtual调用)完全没有。)

简而言之,您可以说不是完全错误,但这是很随意的,这就是我们最终得到的结果。