我有一堆极长方程形式的数据,包括(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)
作为有理数的实例。
答案 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)
,这会引入用户定义的类型,以便您可以在该类型上重载运算符/
/
:1_i
和Rational operator/(MyInt, MyInt)
您使用的解决方案取决于您的具体限制。