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. awk命令结合管道命令对json文件进行统计分析

    json文件内容: $ head file.json {"B": 0.337, "C": 0.663, "name": "xxx& ...

  2. C# 读写opc ua服务器,浏览所有节点,读写节点,读历史数据,调用方法,订阅,批量订阅操作

    OPC UA简介 OPC是应用于工业通信的,在windows环境的下一种通讯技术,原有的通信技术难以满足日益复杂的环境,在可扩展性,安全性,跨平台性方面的不足日益明显,所以OPC基金会在几年前提出了面 ...

  3. caffe 卷积层的运算

    贾清扬寻找快速算法之路:https://github.com/Yangqing/caffe/wiki/Convolution-in-Caffe:-a-memo 卷积运算图文并茂:http://www. ...

  4. Makefile中怎么使用Shell if判断

    /********************************************************************* * Makefile中怎么使用Shell if判断 * 说 ...

  5. windows 按时自动化任务

    参考文章: 1. 巧用Windows 7计划任务设置定时提醒 http://jingyan.baidu.com/article/acf728fd279fe5f8e510a333.html 2. cmd ...

  6. java之接口

    背景 为了防止[多重继承]:(在面向对象的编程语言(例如java)中,指一个类可以同时继承多个父类的行为和特征功能)所引发的"致命方块",出现了接口. 使用  定义 public ...

  7. 用pip安装python 模块OpenSSL

    windows下 1.配置好pip命令 下载安装 pip‑1.5.6.win‑amd64‑py2.7.exeor pip‑1.5.6.win32‑py2.7.exe 装好在C:\Python27\Sc ...

  8. SPOJ Favorite Dice(数学期望)

    BuggyD loves to carry his favorite die around. Perhaps you wonder why it's his favorite? Well, his d ...

  9. 如何实现一个可以用 await 异步等待的 Awaiter

    .NET 和 C# 共同给我们带来的 async/await 异步编程模型(TAP)用起来真的很爽.为了实现异步等待,我们只需要在一切能够能够异步等待的方法前面加上 await 即可.能够异步等待的最 ...

  10. 《DSP using MATLAB》示例 Example 6.14、6.15