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++中的运算符重载练习题的更多相关文章

  1. C++中的运算符重载注意事项

    1.C++中的运算符重载的方式有三种: a.类成员函数重载 b.友元函数重载 c.普通函数重载 注意: a.我们主要使用的方式主要是用:类成员函数和友元函数来实现运算符的重载. b.其实用普通函数理论 ...

  2. c++中的运算符重载operator2(翁恺c++公开课[31-33]学习笔记)

    上一篇operator1中,大概说了下重载的基本用法,接下来对c++中常见的可重载运算符归一下类,说一下它们的返回值,讨论下较为复杂的运算符重载上的坑

  3. c++中的运算符重载operator1(翁恺c++公开课[30]学习笔记)

    运算符重载规则: 只有已经存在的运算符才能被重载,不能自己制造一个c++中没有的运算符进行重载 重载可以在类或枚举类型内进行,也可以是全局函数,但int.float这种已有的类型内是不被允许的 不能二 ...

  4. C++走向远洋——50(Time类中的运算符重载、一目,二目比较运算符、二目赋值运算符、二目加减法运算符)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  5. C++走向远洋——49(项目一2、复数类中的运算符重载、类的友元函数)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  6. C++走向远洋——48(项目一1、复数类中的运算符重载、类的成员函数)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  7. C++中的运算符重载

    首先思考以下几个问题: 1.什么是运算符重载? 2.为什么要重载运算符,它有什么用? 3.可以重载哪些运算符? 4.重载运算符有哪些规则? 一.基本概念 我们在程序中使用各种操作符,比如加(+).赋值 ...

  8. 在Lua中进行运算符重载

    在C++里面运算符是可以重载的,这一点也是C++比较方便的一个地方.在Lua中其实也是可以模拟出运算符的重载的. 在Lua中table中元素的运算都是和一个叫做元表有关的,在一个table型的变量上都 ...

  9. Python 中的运算符重载

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一种运算符对于不同类型的对象,有不同的使用方式.例如, + 用于整型对象,表示两个数相加:用于字符串 ...

随机推荐

  1. MPAndroidChart Wiki(译文)~Part 2

    7. 填充数据 这一章节将讲解给各式各样的图表设置数据的方法. 7.1 LineChart(线形图) 想给图表添加数据,使用如下方法: public void setData(ChartData da ...

  2. ubuntu下erlang man的安装

    下载 http://www.erlang.org/download/otp_doc_man_17.1.tar.gz 找到erlang 安装目录 解压 otp_doc_man_17.1.tar.gz s ...

  3. Encode Adjacent Letters

    Encode a string by counting the consecutive letter. (i.e., "aaaabbxxxyyz" might become &qu ...

  4. Tomcat 配置虚拟路径保存、访问图片

    转载自:https://www.cnblogs.com/magic101/p/7756402.html 配置tomcat的虚拟映射路径 1.修改Tomcat的server.xml文件 <Host ...

  5. 20179223《Linux内核原理与分析》第三周学习笔记

    测试3的实验: 1. 用gcc -g编译vi输入的代码 2. 在main函数中设置一个行断点 3. 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点 4. 提交调 ...

  6. idea Java spring 入门 demo

    根据这个 来实现 理解 https://www.cnblogs.com/xing901022/p/3963962.html 这里没有说如何导入包,现在我们用 idea 来实现 新建项目结构后 RUN ...

  7. simulink中几个bit型操作模型

    bit concat  将两个fix point 数据 结合到一块. bit rotate 循环移位 bit shift 移位 又分逻辑移位和算术移位,逻辑移位不管最高位0或1,统统移0,算术移位会移 ...

  8. 日志框架--(二)JDK Logging

    前言 从jdk1.4起,JDK开始自带一套日志系统.JDK Logger最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用.相对于其他的日志框架,JDK自带的日志可谓是鸡肋,无论易 ...

  9. java创建多线程&创建进程

    概述 并发和并行是即相似又有区别: 并行:指两个或多个事件在同一时刻发生: 并发:指两个或多个事件在同一时间段内发生. 进程是指一个内存中运行中的应用程序.每个进程都有自己独立的一块内存空间,一个应用 ...

  10. div,css常用技术

    1,<div></div>一张图作为背景的用法: 必须指定width,height,background属性 .smallCircle{ margin-top: 25px;   ...