【重构练习】大二作业 第4部分
来源:互联网 发布:淘宝买零食有毒吗 编辑:程序博客网 时间:2024/06/15 02:50
一番修改后,发现比较函数如
friend bool operator<(BigAmount& ba1,BigAmount& ba2);friend bool operator<(BigAmount& ba1,long long ba2);
它们只是函数参数不同,但是在函数内部的代码是一样的
bool operator<(BigAmount& ba1,BigAmount& ba2){return ba1.CompareTo(ba2) == -1;}bool operator<(BigAmount& ba1,long long ba2){return ba1.CompareTo(ba2) == -1;}
毫无疑问这里需要想办法将两个代码合并。
观察代码发现,这两个函数都调用BigAmount的CompareTo函数,只不过一个调用的参数是“BigAmount&”类型,另一个是“long long”类型。
而后者只是将这个long long类型的参数转成BigAmount类型后,再调用前者。
int BigAmount::CompareTo(BigAmount& ba2){ //balabala}int BigAmount::CompareTo(long long ba2){return CompareTo(BigAmount(ba2));}因此,我想如果能在传long long类型参数的时候就完成类型转换,就可以合并运算符重载函数。
我做了一点小测试,发现要做到这一点还是比较方便的。
首先将函数
friend bool operator<(BigAmount& ba1,BigAmount& ba2);
的两个参数前面,以及括号的后面分别加const关键字,如下所示
friend bool operator<(const BigAmount& ba1,const BigAmount& ba2);
这样一来当传入long long 类型的参数时,就可以自动转换为BigAmount类型。
但是这样还不够,函数内部调用的是CompareTo函数,这个函数的参数是BigAmount&类型,也要在前面加上const关键字。此外函数的参数列表括号之后也要加上const关键字。
//原来的代码int CompareTo(BigAmount &ba2);//修改后的代码int CompareTo(const BigAmount &ba2) const;CompareTo函数以及运算符函数的实现部分也作如上处理。
------------------------------------------------------------------------------------------
修改完成之后,我决定进行一下测试。由于运算符重载函数在执行时仅将参数传给CompareTo函数,所以测试的主要对象是修改后的CompareTo函数,而且因为只修改了函数的首部,所以只要判断程序是否正常运行即可。
在测试之前,先将CompareTo的long long参数版本的声明和实现注释掉。
然后将main函数里已有的测试代码复制到另一个地方,最后编写测试程序。(不清楚C++有哪些测试工具。。。)
int _tmain(int argc, _TCHAR* argv[]){BigAmount test1,test2;long long testLong;cout<<"请输入大整数1 以及大整数2:"<<endl;cin>>test1>>test2;cout<<"请输入long long类型的数值:"<<endl;cin>>testLong;cout<<"大整数1.CompareTo(大整数2)的结果是:"<<test1.CompareTo(test2)<<endl;cout<<"大整数1.CompareTo(long long)的结果是:"<<test1.CompareTo(testLong)<<endl;return 0;}int oldTest(){//这里存放原先的测试代码}编译程序,程序能正常运行。说明改动并没有出问题,删掉之前注释的CompareTo函数,并修改所有的比较运算符重载函数。
- 【重构练习】大二作业 第4部分
- 【重构练习】大二作业 第0部分
- 【重构练习】 大二作业 第1部分
- 【重构练习】大二作业 第2部分
- 【重构练习】大二作业 第3部分
- 第四周作业 部分
- 第Ⅰ部分 敏捷开发 第5章 重构
- 第5章部分作业的参考答案
- 第四周作业的抄写部分
- 第四周作业(课本习题部分)
- 部分重构代码
- Java贪吃蛇,部分实现,适合作为新手练习作业。
- 第四周作业 4
- 第 4堂作业
- 第 4堂作业
- 第 4堂作业
- 第4堂作业
- 第 4堂作业
- CentOS & Ubuntu 改变网口IP脚本
- C语言位操作复习
- 开通博客啦。。。
- HDU 2097 Sky数(水题)
- 2016-4第一题折点计算
- 【重构练习】大二作业 第4部分
- 文本挖掘分析技术
- v-model的语法糖
- k倍区间
- 通过转成Blob文件下载base64图片(兼容IE)
- Recycleview 多布局添加和cardview使用
- Android源码分析之Glide源码分析&基础版ImageLoader框架
- JAVA蓝桥杯 数列特征
- 1125 POJ#1208 The Blocks Problem