覆盖运算符 +
Overriding the operator +
我有一个问题要求我覆盖运算符 + 以便它添加两位数的数值并提供我们最终应用“模 10”时得到的数字。
(示例“5”+“6”=“1”//5+6=11%10=1)
我刚开始自学c++,解释清楚对我的进步有很大帮助。
无法为内置类型(int
等)重载 operator+()。因此,如果 a
和 b
都是 int
类型且值分别为 5
和 6
,则不可能使 a + b
给出1
.
的值
但是,可以对用户定义的类型(classes、枚举等)执行此操作。
例如,使用名为 MyInt
的 class 类型,可以将 operator+() 实现为接受一个参数的成员函数,或作为接受一个参数的非成员函数接受两个。
一旦您可以实现 operator+()
,您就可以定义它以提供您喜欢的任何结果。您的 class(为了便于讨论,我称之为 MyInt
)可能还需要一组其他函数(例如构造函数、其他数字运算符)。
请注意 - 尽管在技术上可行 - 使数字类型的行为违反直觉被认为是非常糟糕的做法。对大多数人来说,使用加法运算符创建数值类型与加法不同是违反直觉的。包括你自己,如果几年后维护你的代码。
出于 readability/maintainability 目的,像这样重载 operator+(),我认为真的很糟糕。
当然不想写
(num1 + num2) % 10
所有的时间,所以你可以有自己的功能
int modulo10AfterAddition (int leftNumber, int rightNumber)
{
return (leftNumber + rightNumber) % 10;
}
当然,如果你创建一个自己的class,比如MyInt,你可以相应地修改它。
我有一个问题要求我覆盖运算符 + 以便它添加两位数的数值并提供我们最终应用“模 10”时得到的数字。 (示例“5”+“6”=“1”//5+6=11%10=1)
我刚开始自学c++,解释清楚对我的进步有很大帮助。
无法为内置类型(int
等)重载 operator+()。因此,如果 a
和 b
都是 int
类型且值分别为 5
和 6
,则不可能使 a + b
给出1
.
但是,可以对用户定义的类型(classes、枚举等)执行此操作。
例如,使用名为 MyInt
的 class 类型,可以将 operator+() 实现为接受一个参数的成员函数,或作为接受一个参数的非成员函数接受两个。
一旦您可以实现 operator+()
,您就可以定义它以提供您喜欢的任何结果。您的 class(为了便于讨论,我称之为 MyInt
)可能还需要一组其他函数(例如构造函数、其他数字运算符)。
请注意 - 尽管在技术上可行 - 使数字类型的行为违反直觉被认为是非常糟糕的做法。对大多数人来说,使用加法运算符创建数值类型与加法不同是违反直觉的。包括你自己,如果几年后维护你的代码。
出于 readability/maintainability 目的,像这样重载 operator+(),我认为真的很糟糕。
当然不想写
(num1 + num2) % 10
所有的时间,所以你可以有自己的功能
int modulo10AfterAddition (int leftNumber, int rightNumber)
{
return (leftNumber + rightNumber) % 10;
}
当然,如果你创建一个自己的class,比如MyInt,你可以相应地修改它。