博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中的运算符重载练习题
阅读量:5878 次
发布时间:2019-06-19

本文共 4094 字,大约阅读时间需要 13 分钟。

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 #include 
2 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 #include 
2 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<
<<"-"<
<<"-"<
<

 

转载于:https://www.cnblogs.com/wyb666/p/9178389.html

你可能感兴趣的文章
Python WOL/WakeOnLan/网络唤醒数据包发送工具
查看>>
sizeof(long)
查看>>
pxe网络启动和GHOST网克
查看>>
2.5-saltstack配置apache
查看>>
http状态响应码大全(复制转帖)
查看>>
django数据库中的时间格式与页面渲染出来的时间格式不一致的处理
查看>>
Python学习笔记
查看>>
java String
查看>>
renhook的使用
查看>>
Linux学习笔记(十二)--命令学习(用户创建、删除等)
查看>>
DOCKER windows 7 详细安装教程
查看>>
养眼美女绿色壁纸
查看>>
U盘启动盘制作工具箱 v1.0
查看>>
增强myEclipse的提示功能
查看>>
Zabbix汉化方法
查看>>
Java I/O系统基础知识
查看>>
Java多线程设计模式(2)生产者与消费者模式
查看>>
基于whoosh的flask全文搜索插件flask-msearch
查看>>
对象并不一定都是在堆上分配内存的
查看>>
刘宇凡:罗永浩的锤子情怀只能拿去喂狗
查看>>