使用/创建一个简单的有理数对象

时间:2014-05-09 10:27:19

标签: c++ class

我有一堆极长方程形式的数据,包括(a/b)形式的有理数,其中a和b是整数。我创建了一个简单的类,用相应的算术运算符存储有理数。

我正在尝试编写一些能够识别形式(a/b)的代码,并使用相应的分子和分母构造该类的实例。我更希望保留输入(a/b)的原始形式。可以重载/运算符,使(a/b)返回一个有理数字对象吗? (如果没有,任何解决方法的想法?)

非常简化的代码示例:

Param A;
Param B;
(3/5)*A*A + (1/3)*B*B

我的Param类具有明确定义的自身乘法和有理数字类。我只需要将代码识别为(3/5)(1/3)作为有理数的实例。

3 个答案:

答案 0 :(得分:4)

没有;如果至少有一个操作数是用户定义的类型,则只能重载运算符。您不能重载operator/,其中两个操作数都是int或任何其他内置类型。

最接近的是rational(a)/b。这是否优于rational(a,b)取决于你的审美判断。

在C ++ 11或更高版本中,您可以使用用户定义的文字进行处理,并编写3_r/4之类的内容;但我不会。

答案 1 :(得分:3)

不,你不能写Rational operator/(int, int)。因为您无法重新定义/以获取整数。

答案 2 :(得分:2)

直接答案是否:运算符重载至少需要一个用户定义的类型(否则,它们会与现有运算符冲突)。

至于解决方法,有很多可用的方法:

  • 您可以使用功能:rational(a, b)
  • 您可以使用代理对象:MyInt(a) / MyInt(b),这会引入用户定义的类型,以便您可以在该类型上重载运算符/
  • 您可以使用C ++ 11用户定义的文字将整数包装到代理类中,并在其上重载运算符/1_iRational operator/(MyInt, MyInt)

您使用的解决方案取决于您的具体限制。