覆盖运营商+

时间:2015-11-19 06:58:38

标签: c++ override

我有一个问题,要求我覆盖运算符+,以便它添加两位数的数值,并提供我们得到的数字,如果我们最终应用“modulo 10”。 (示例'5'+'6'='1'// 5 + 6 = 11%10 = 1)

我刚开始自己​​学习c ++,明确的解释对我的进步有很大的帮助。

2 个答案:

答案 0 :(得分:0)

内置类型(int等)不能重载operator +()。因此,如果ab都属于int类型且值分别为56,则无法使a + b给出值1

但是,可以对用户定义的类型(类,枚举等)执行此操作。

例如,对于名为MyInt的类类型,可以将operator +()实现为接受一个参数的成员函数,或者作为接受两个参数的非成员函数。

一旦你可以实现operator+(),你可以定义它以给出你喜欢的任何结果。你的类(我为了讨论而调用MyInt)可能还需要一组其他函数(例如构造函数,其他数字运算符)。

请注意 - 虽然技术上可行 - 但是,将数字类型设置为违反直觉的行为被认为是非常糟糕的做法。使用与添加不同的加法运算符创建数字类型对大多数人来说是违反直觉的。包括你自己,如果在几年后维护你的代码。

答案 1 :(得分:0)

出于可读性/可维护性的目的,重载像这样的运算符+(),我觉得非常糟糕。

当然你不想写

(num1 + num2) % 10
总是

,所以你可以有自己的功能

int modulo10AfterAddition (int leftNumber, int rightNumber)
{
    return (leftNumber + rightNumber) % 10;
} 

当然,如果你创建一个像MyInt这样的自己的类,你可以相应地修改它。