一、基本想法
(1)整数和分数的四则运算
由于四则运算要支持分数,刚开始我想着是自定义分数这种数据类型,而后再重载运算符。可当整数和分数混合运算的话,就要考虑到数据类型间的转化,比较麻烦。于是我转化了下思路,即将整数看成是特殊的分数(分母为1),这样将整数和分数统一起来,那么初始化便可以根据具体的数据类型做出调整,如下图所示:
这里需要特别注意的是,我们最后控制台显示的算式是String类型,因而要能实现分数Fraction和String直接的相互转化。
而且要自定义一种隐式转化,这样就能令分数表示出正确的形式(比如整数10不显示分母,分数2/5等)
这时问题又出来了,分数2/4等同于1/2,即在实际应用中分数要进行相应化简,解决方案是求取分母分子的最大公约数,并且如果分子为负数,则将分子分母同时乘以-1(为了比较大小乘以分子大小符号不会改变)
最后便是运算符的重载了,这里以+、<、==为例
其中Add函数具体实现如下:
由于减法等同于加一个负数,除法实际上是乘一个倒数,这里就不再赘述
另外分子不能为0,因此要进行相应的异常处理。
(2)运算符的扩展
(3)程序流程
二、代码实现
三、遇到bug并解决
四、部分程序截图
五、程序改进
时间: 2024-10-03 15:48:21