1.RMB类
要求:
定义一个RMB类 Money,包含元、角、分三个数据成员,友元函数重载运算符‘+’(加)
和 ‘-’(减),实现货币的加减运算 例如: 请输入元、角 分: 2 3 4 请输入元、角 分: 3 7 3 和:6元0角7分 差:-1元3角9分 又例如: 请输入元、角 分: 2 3 4 请输入元、角 分: 3 0 0 和:4元6角0分 差:-0元6角6分
代码实现:
1 #include2 using namespace std; 3 4 class Money 5 { 6 private: 7 int yuan, jiao, fen; 8 bool flag; //标志位,0表示钱数为正,1表示钱数为负 -> 默认结果的钱数为正 9 public:10 Money(); 11 Money(int fg, int y=0, int j=0, int f=0): yuan(y), jiao(j), fen(f), flag(fg){}12 friend Money operator+(Money a, Money b); 13 friend Money operator-(Money a, Money b);14 void display();15 16 };17 18 Money::Money()19 {20 flag = 0;21 cout << "请输入元、角 分:" < > yuan >> jiao >> fen;23 }24 25 void Money::display()26 {27 if(flag==1) cout << '-'; 28 cout << yuan << "元" << jiao << "角" << fen << "分" << endl;29 }30 31 //请用友元函数重载加/减,并要在类Money中声明为友元 32 //TODO重载加 类外定义Money类的+重载运算 33 Money operator+(Money a, Money b)34 {35 Money temp(0);36 // 将钱全部转化成分来计算 37 int money_a = a.yuan*100 + a.jiao*10 + a.fen*1;38 int money_b = b.yuan*100 + b.jiao*10 + b.fen*1;39 int res = money_a + money_b;40 // 因为是相加 故应该结果是正的 所以不用判断符号 但是相减时 结果可能为负 就要判断符号 41 temp.yuan = res/100;42 res = res % 100;43 temp.jiao = res/10;44 temp.fen = res % 10;45 46 // 返回结果对象 47 return temp;48 } 49 50 //TODO重载减 类外定义Money类的-重载运算 51 Money operator-(Money a, Money b)52 {53 Money temp(0);54 // 将钱全部转化成分来计算 55 int money_a = a.yuan*100 + a.jiao*10 + a.fen*1;56 int money_b = b.yuan*100 + b.jiao*10 + b.fen*1;57 int res = money_a - money_b;58 // 因为是相减时 结果可能为负 就要判断符号 59 if(res < 0)60 {61 temp.flag = 1;62 res = -res;63 } 64 temp.yuan = res/100;65 res = res % 100;66 temp.jiao = res/10;67 temp.fen = res % 10;68 69 // 返回结果对象 70 return temp;71 }72 73 int main() 74 {75 Money m1, m2, m3(0), m4(0); //m3用来记录和,m4用来记录差 76 77 // +78 m3=m1+m2;79 cout<<"和:";80 m3.display(); 81 82 // -83 m4=m1-m2;84 cout<<"差:";85 m4.display();86 87 return 0;88 }
2.日期类运算符重载
要求:
定义一个日期类Date,包含年、月、日三个数据成员
友元函数重载自增运算符(++),实现日期的自增。运行结果如下 例如: 请输入年、月、日: 2016 11 11 今天是:2016-11-11 明天是:2016-11-12 请完成以下程序 ,并注意特殊情况,例 输入的是2016-12-31日 输出的是2017-1- 1日
代码实现:
1 #include2 using namespace std; 3 4 class Date{ 5 private: 6 int year; 7 int month; 8 int day; 9 public:10 Date();11 Date operator++(int); // 申明重载的操作符,这种方法是后缀++ 12 /*13 ++和--重载注意: ++和--有前后缀之分,另外下面的int只是一个占位符用来提示编译器 14 类名 operator++(); ++前缀 -> 调用方式: ++对象名 15 类名 operator--(); --前缀 -> 调用方式: --对象名16 类名 operator++(int); ++后缀 -> 调用方式: 对象名++17 类名 operator--(int); --后缀 -> 调用方式: 对象名--18 */ 19 void display();20 }; 21 22 // 判断是否是闰年 是闰年返回1 不是返回0 23 int judge(int year)24 {25 if(year%4==0&&year%100!=0||year%400==0)26 return 1; //闰年 27 return 0; //非闰年 28 }29 30 // 构造函数 31 Date::Date()32 {33 cout<<"请输入年、月、日:\n";34 cin>>year>>month>>day;35 }36 37 // 运算符重载 38 Date Date::operator++(int)39 {40 // 数组存储一年12个月的天数,如果对象中的年份为闰年就将2月份的天数+1 41 int month_days[12]={ 31,28,31,30,31,30,31,31,30,31,30,31};42 if(judge(year))43 {44 month_days[1]++;45 }46 47 // 天数刚好是这个月的最后一天 就要判断月份是否是一年的最后一个月(12月)48 // 如果是12月 那么说明这一天是这一年的最后一天 那么年份+1 月和天均置149 // 如果不是12月 那么就把月份+1,天置1 50 if(day==month_days[month-1])51 {52 if(month==12) 53 {54 year++;55 month=1;56 day=1;57 }58 else59 {60 month++;61 day=1;62 }63 }64 // 天数不是这个月的最后一天 就直接把天数+1即可 65 else66 {67 day++;68 }69 70 // 返回计算后的对象 就是套路 凡是++和--运算符重载 都可以这样做71 // 当然可以提前用一个temp保存*temp的值然后返回temp 也是同理 书上这两种方法都有 72 return *this;73 }74 75 void Date::display()76 {77 cout< <<"-"< <<"-"< <