C++中的运算符重载练习题
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分
代码实现:
#include <iostream>
using namespace std; class Money
{
private:
int yuan, jiao, fen;
bool flag; //标志位,0表示钱数为正,1表示钱数为负 -> 默认结果的钱数为正
public:
Money();
Money(int fg, int y=, int j=, int f=): yuan(y), jiao(j), fen(f), flag(fg){}
friend Money operator+(Money a, Money b);
friend Money operator-(Money a, Money b);
void display(); }; Money::Money()
{
flag = ;
cout << "请输入元、角 分:" <<endl;
cin >> yuan >> jiao >> fen;
} void Money::display()
{
if(flag==) cout << '-';
cout << yuan << "元" << jiao << "角" << fen << "分" << endl;
} //请用友元函数重载加/减,并要在类Money中声明为友元
//TODO重载加 类外定义Money类的+重载运算
Money operator+(Money a, Money b)
{
Money temp();
// 将钱全部转化成分来计算
int money_a = a.yuan* + a.jiao* + a.fen*;
int money_b = b.yuan* + b.jiao* + b.fen*;
int res = money_a + money_b;
// 因为是相加 故应该结果是正的 所以不用判断符号 但是相减时 结果可能为负 就要判断符号
temp.yuan = res/;
res = res % ;
temp.jiao = res/;
temp.fen = res % ; // 返回结果对象
return temp;
} //TODO重载减 类外定义Money类的-重载运算
Money operator-(Money a, Money b)
{
Money temp();
// 将钱全部转化成分来计算
int money_a = a.yuan* + a.jiao* + a.fen*;
int money_b = b.yuan* + b.jiao* + b.fen*;
int res = money_a - money_b;
// 因为是相减时 结果可能为负 就要判断符号
if(res < )
{
temp.flag = ;
res = -res;
}
temp.yuan = res/;
res = res % ;
temp.jiao = res/;
temp.fen = res % ; // 返回结果对象
return temp;
} int main()
{
Money m1, m2, m3(), m4(); //m3用来记录和,m4用来记录差 // +
m3=m1+m2;
cout<<"和:";
m3.display(); // -
m4=m1-m2;
cout<<"差:";
m4.display(); return ;
}
2.日期类运算符重载
要求:
定义一个日期类Date,包含年、月、日三个数据成员
友元函数重载自增运算符(++),实现日期的自增。运行结果如下
例如:
请输入年、月、日:
2016 11 11
今天是:2016-11-11
明天是:2016-11-12
请完成以下程序 ,并注意特殊情况,例
输入的是2016-12-31日
输出的是2017-1- 1日
代码实现:
#include <iostream>
using namespace std; class Date{
private:
int year;
int month;
int day;
public:
Date();
Date operator++(int); // 申明重载的操作符,这种方法是后缀++
/*
++和--重载注意: ++和--有前后缀之分,另外下面的int只是一个占位符用来提示编译器
类名 operator++(); ++前缀 -> 调用方式: ++对象名
类名 operator--(); --前缀 -> 调用方式: --对象名
类名 operator++(int); ++后缀 -> 调用方式: 对象名++
类名 operator--(int); --后缀 -> 调用方式: 对象名--
*/
void display();
}; // 判断是否是闰年 是闰年返回1 不是返回0
int judge(int year)
{
if(year%==&&year%!=||year%==)
return ; //闰年
return ; //非闰年
} // 构造函数
Date::Date()
{
cout<<"请输入年、月、日:\n";
cin>>year>>month>>day;
} // 运算符重载
Date Date::operator++(int)
{
// 数组存储一年12个月的天数,如果对象中的年份为闰年就将2月份的天数+1
int month_days[]={,,,,,,,,,,,};
if(judge(year))
{
month_days[]++;
} // 天数刚好是这个月的最后一天 就要判断月份是否是一年的最后一个月(12月)
// 如果是12月 那么说明这一天是这一年的最后一天 那么年份+1 月和天均置1
// 如果不是12月 那么就把月份+1,天置1
if(day==month_days[month-])
{
if(month==)
{
year++;
month=;
day=;
}
else
{
month++;
day=;
}
}
// 天数不是这个月的最后一天 就直接把天数+1即可
else
{
day++;
} // 返回计算后的对象 就是套路 凡是++和--运算符重载 都可以这样做
// 当然可以提前用一个temp保存*temp的值然后返回temp 也是同理 书上这两种方法都有
return *this;
} void Date::display()
{
cout<<year<<"-"<<month<<"-"<<day<<endl;
} int main()
{
Date d1;
cout<<"今天是:";
d1.display();
d1++;
cout<<"明天是:";
d1.display();
}
C++中的运算符重载练习题的更多相关文章
- C++中的运算符重载注意事项
1.C++中的运算符重载的方式有三种: a.类成员函数重载 b.友元函数重载 c.普通函数重载 注意: a.我们主要使用的方式主要是用:类成员函数和友元函数来实现运算符的重载. b.其实用普通函数理论 ...
- c++中的运算符重载operator2(翁恺c++公开课[31-33]学习笔记)
上一篇operator1中,大概说了下重载的基本用法,接下来对c++中常见的可重载运算符归一下类,说一下它们的返回值,讨论下较为复杂的运算符重载上的坑
- c++中的运算符重载operator1(翁恺c++公开课[30]学习笔记)
运算符重载规则: 只有已经存在的运算符才能被重载,不能自己制造一个c++中没有的运算符进行重载 重载可以在类或枚举类型内进行,也可以是全局函数,但int.float这种已有的类型内是不被允许的 不能二 ...
- C++走向远洋——50(Time类中的运算符重载、一目,二目比较运算符、二目赋值运算符、二目加减法运算符)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- C++走向远洋——49(项目一2、复数类中的运算符重载、类的友元函数)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- C++走向远洋——48(项目一1、复数类中的运算符重载、类的成员函数)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- C++中的运算符重载
首先思考以下几个问题: 1.什么是运算符重载? 2.为什么要重载运算符,它有什么用? 3.可以重载哪些运算符? 4.重载运算符有哪些规则? 一.基本概念 我们在程序中使用各种操作符,比如加(+).赋值 ...
- 在Lua中进行运算符重载
在C++里面运算符是可以重载的,这一点也是C++比较方便的一个地方.在Lua中其实也是可以模拟出运算符的重载的. 在Lua中table中元素的运算都是和一个叫做元表有关的,在一个table型的变量上都 ...
- Python 中的运算符重载
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一种运算符对于不同类型的对象,有不同的使用方式.例如, + 用于整型对象,表示两个数相加:用于字符串 ...
随机推荐
- pip安装tensorflow出错怎么办
随着人工智能的开发越来越多人参与,现在下载tensorflow 1.2版本也经常出错了,如下: 这时怎么办呢? 其实比较简单,可以通过pypi的网站来下载: https://pypi.python.o ...
- HDU 1033
http://acm.hdu.edu.cn/showproblem.php?pid=1033 这题的题干说的很绕,结合样例不难理解题意,走折线,A代表顺时针,V代表逆时针,给一个包含A和V的字符串,输 ...
- UICollectionView 数据库元素分组 多种section分开显示
第一遍 复杂方法 : 数据库查询一个表中userID 然后进行分类 中间去重 获得ID个数 放到section 中 显示 #pragma mark - 查询不同的ID 各数 - (void)c ...
- 2017《Java技术》预备作业01
2017<Java技术>预备作业 1.学习使用MarkDown 本学期的随笔都将使用MarkDown格式,要求熟练掌握MarkDown语法,学会如何使用标题,插入超链接,列表,插入图片,插 ...
- baos bais 意义
import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOut ...
- day4(带)
int is_his_file(char*filename,char *username) { int ret; struct passwd *user_info;// struct stat sta ...
- 数据结构(Data Structures)
一.List数据类型的方法 定义两个list,a和b:a=[1,2,3,4],b=[7,8,9,10] a.append(x) 在a的末尾附加x元素 a.extend(b) ...
- 树形DP新识
HihoCoder: 1041(点) 1063(边) 1035(边) HDU1520 (签到) HDU2415(emm) 目前我遇到的树形DP有两类: ∂:点处理,大概就是点的乱搞,比如找一些点,这些 ...
- Codeforces Round #371 & HihoCoder1529【玄学】
时间限制:40000ms 单点时限:2000ms 内存限制:256MB 描述 给定一个长度为 n 的非负整数序列 a[1..n]. 你每次可以花费 1 的代价给某个 a[i] 加1或者减1. 求最少需 ...
- tensorflow图像基本处理
tensorflow库提供的专门的图片处理库,以下只是部分示例,更多函数请参照源码'\tensorflow_api\v1\image__init__.py' 加载图像 方式1: 使用tf.gfile. ...