运算符重载。。

本文总结了在代码简洁化过程中遇到的问题及解决方法,包括利用compareTo()函数简化关系运算符重载,输出运算符重载的实现策略,以及在分数输出时保持最简形式的技巧。同时讨论了在单目运算符使用中遇到的循环错误,并介绍了两种不同的字符串化方法。
摘要由CSDN通过智能技术生成

把自己做这道题大概学到的东西总结一下:

【代码简洁化】

1.首先通过compareTo()函数可以来对关系运算符的重载进行简化:

(蓝色注释部分其实可以简化)

2.当然对代码的简洁化其实还有蛮多体会的~都尽量把一些可以合并的情况合并起来O(∩_∩)O哈哈~

【难点】

1.其实比较困扰的问题是,输出运算符如何重载,当我又考虑分数的输出格式的时候,而且得考虑结果需要写成最简式


step1:先从别人那里得到思路,可以在toString()函数中把分数化简,这样子在+=,++,-=,--之类的运算的时候可以写成普通的形式,到最后一起化简

           b/a + d/c = (bc + ad) / ac ;      b/a + 1 = (b + a)/a ;  在做加法减法的运算符重载的时候就会方便很多;

step2:前自增或自减比较简单,只需要返回一个加1或减1的对象就可以了;而后自增和自减需要先返回一个原来的对象,再进行加1减1返回后来的对象:

       Rational Rational::operator++ {

                        Rational temp = *this;

                        numerator += denominator;

                        return temp;

}           

step3:还有就是在单目运算符‘-’出现了一个错误,导致了那个函数的无限循环


step4:toString的实现先考虑他们的最大公约数gcd,然后再去考虑特殊情况,比如分子为0,分母为1,以及当分母存在负号的时候(相对应的输出应该是0,只输出分子,符号移到分子上)

          法一:在输出的时候我用了stringstream(在头文件<sstream>中),这样相对比较简洁;在<<运算符重载的时候只需调用toString就可以了

         法二:(这是我同学的做法,将数字转化成字符串输出,当然也是需要考虑上面所说的情况的)觉得真的很好(贴图保留~)

【第一篇博客就这样贴图水过去了,(⊙﹏⊙)b】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值