把自己做这道题大概学到的东西总结一下:
【代码简洁化】
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】