作业-day-240607

news2024/11/26 15:43:27

思维导图

C++编程

要求:

搭建一个货币的场景,创建一个名为 RMB 的类,该类具有整型私有成员变量 yuan(元)、jiao(角)和 fen(分),并且具有以下功能:

(1)重载算术运算符 + 和 -,使得可以对两个 RMB 对象进行加法和减法运算,并返回一个新的 RMB 对象作为结果。

(2)重载关系运算符 >,判断一个 RMB 对象是否大于另一个 RMB 对象,并返回 true 或 false。

(3)重载前置减减运算符 --,使得每次调用时 RMB 对象的 yuan、jiao 和 fen 分别减 1

(4)重载后置减减运算符 --,使得每次调用时 RMB 对象的 yuan、jiao 和 fen 分别减 1

(5)另外, RMB 类还包含一个静态整型成员变量 count,用于记录当前已创建的 RMB 对象的数量。每当创建一个新的 RMB 对象时,count 应该自增 1;每当销毁一个 RMB 对象时,count 应该自减 1。

要求,需要在main 函数中测试上述RMB 类的功能。

代码:

#include <iostream>

using namespace std;

//定义类RMB
class RMB{
    //定义友元函数
    friend const RMB operator--(RMB &R, int);

private:
    int yuan;   //元
    int jiao;   //角
    int fen;    //分
    static int count;   //已创建的 RMB 对象的数量

public:
    //静态成员函数:获取当前count
    static int getCount()
    {
        return count;
    }

    //静态成员函数:修改当前count
    static void changeCount(int date)
    {
        count = date;
    }

    //无参构造函数
    RMB()
    {
        changeCount(++count);   //cout+1
    }

    //有参构造函数:初始化
    RMB(int y, int j, int f):yuan(y),jiao(j),fen(f)
    {
        changeCount(++count);   //cout+1
    }
    //成员函数:输出类信息
    void display()
    {
        cout << yuan << "元\t" << jiao << "角\t" << fen << "分" << endl;
    }

    //成员函数:=号运算符重载
    RMB &operator=(const RMB &other)
    {
        //避免给自己赋值
        if(this != &other)
        {
            yuan = other.yuan;
            jiao = other.jiao;
            fen = other.fen;
        }

        return *this;
    }

    //成员函数:+号运算符重载
    const RMB operator+(const RMB &R) const
    {
        RMB temp;
        temp.yuan = yuan + R.yuan;
        temp.jiao = jiao + R.jiao;
        temp.fen = fen + R.fen;

        if(temp.fen >= 10)  //进位:分>10,角+1,分-10
        {
            temp.jiao++;
            temp.fen -= 10;
        }

        if(temp.jiao >= 10) //进位:角>10,元+1,角-10
        {
            temp.yuan++;
            temp.jiao -= 10;
        }

        return temp;
    }

    //成员函数:-号运算符重载
    const RMB operator-(const RMB &R) const
    {
        RMB temp;
        temp.yuan = yuan - R.yuan;
        temp.jiao = jiao - R.jiao;
        temp.fen = fen - R.fen;
        if(temp.fen < 0)    //补位
        {
            temp.jiao--;
            temp.fen += 10;
        }
        if(temp.jiao < 0)   //补位
        {
            temp.yuan--;
            temp.fen += 10;
        }
        if(temp.yuan < 0)   //元为负数,则提醒
        {
            cout << "元已为负数!" << endl;
        }

        return temp;
    }

    //成员函数:>号运算符重载
    bool operator>(const RMB &R) const
    {
        if(yuan > R.yuan || (yuan == R.yuan && jiao > R.jiao) || (yuan == R.yuan && jiao == R.jiao && fen > R.fen) )
            return true;
        else
            return false;
    }
    //成员函数:--前置减减运算符重载
    RMB &operator--()
    {
        --fen;
        if(fen < 0)     //补位
        {
            jiao--;
            fen += 10;
        }
        --jiao;
        if(jiao < 0)    //补位
        {
            yuan--;
            jiao += 10;
        }
        --yuan;
        if(yuan < 0)    //元为负数,则提醒
        {
            cout << "元已为负数!" << endl;
        }

        return *this;
    }

};

//初始化静态变量count
int RMB::count = 0;

//全局函数:--后置减减运算符重载
const RMB operator--(RMB &R, int)
{
    RMB temp;
    temp.yuan = R.yuan--;
    temp.jiao = R.jiao--;
    temp.fen = R.fen--;
    if(temp.fen < 0)     //补位
    {
        temp.jiao--;
        temp.fen += 10;
    }

    if(temp.jiao < 0)    //补位
    {
        temp.yuan--;
        temp.jiao += 10;
    }

    if(temp.yuan < 0)    //元为负数,则提醒
    {
        cout << "元已为负数!" << endl;
    }

    return temp;
}

int main()
{
    RMB r1(100,9,5);
    cout << "cout = " << RMB::getCount() << endl;
    cout << "r1 =\t";
    r1.display();
    cout << "--r1 =\t";
    (--r1).display();

    RMB r2 = r1--;
    cout << "cout = " << RMB::getCount() << endl;
    cout << "r2 =\t";
    r2.display();
    cout << "r1-- =\t";
    r1.display();

    RMB r3(87,4,8);
    cout << "cout = " << RMB::getCount() << endl;
    cout << "r3 =\t";
    r3.display();

    RMB t1 = r1 - r3;
    cout << "cout = " << RMB::getCount() << endl;
    cout << "r1 =\t";
    r1.display();
    cout << "r3 =\t";
    r3.display();
    cout << "r1 - r3 =\t";
    t1.display();

    RMB t2 = r1 + r2;
    cout << "cout = " << RMB::getCount() << endl;
    cout << "r1 =\t";
    r1.display();
    cout << "r2 =\t";
    r2.display();
    cout << "r1 + r2 =\t";
    t2.display();

    if(r1 > r2)
        cout << "r1 > r2" << endl;
    else
        cout << "r1 < r2" << endl;

    return 0;
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1808805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

---java 抽象类 和 接口---

抽象类 再面向对对象的语言中&#xff0c;所以的对象都是通过类来描述的&#xff0c;但如果这个类无法准确的描述对象的 话&#xff0c;那么就可以把这个类设置为抽象类。 实例 这里用到abstract修饰&#xff0c;表示这个类或方法是抽象方法 因为会重写motifs里的show方法…

某药监局后缀(第一部分)

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未经许可禁止转载&#xff…

微服务之熔断器

1、高并发带来的问题 在微服务架构中&#xff0c;我们将业务拆分成一个个的服务&#xff0c;服务与服务之间可以相互调用&#xff0c;但是由于网络原因 或者自身的原因&#xff0c;服务并不能保证服务的100%可用&#xff0c;如果单个服务出现问题&#xff0c;调用这个服务就会…

分别利用线性回归、多项式回归分析工资与年限的关系

一、线性回归&#xff1a; 实验思路&#xff1a; 先分析线性回归的代码&#xff0c;然后结合Salary_dataset.csv内容分析&#xff0c;编写代码。 实验代码&#xff1a; import pandas as pd import numpy as np from sklearn.linear_model import LinearRegression from skle…

【SQLAlChemy】filter过滤条件如何使用?

filter 过滤条件 生成 mock 数据 # 创建 session 对象 session sessionmaker(bindengine)()# 本地生成mock数据 for i in range(6):# 生成随机名字, 长度为4到7个字符name .join(random.choice(string.ascii_letters) for _ in range(random.randint(4, 7)))# 生成随机年龄…

C语言之常用字符串函数总结、使用和模拟实现

文章目录 目录 一、strlen 的使用和模拟实现 二、strcpy 的使用及模拟实现 三、strcat 的使用和模拟实现 四、strcmp 的使用和模拟实现 五、strncpy 的使用和模拟实现 六、strncat 的使用和模拟实现 七、strncmp 的使用和模拟实现 八、strstr 的使用和模拟实现 九、st…

Freeswitch-soundtouch-变声开发

文章目录 一、介绍二、安装soundtouch2.1 源码安装方式&#xff08;推荐&#xff09;2.1.1下载源码2.1.2解压2.1.3 编译2.1.4 迁移&#xff08;可选&#xff09; 2.2 apt-get 安装 三、使用3.1 终端使用3.2 Freeswitch使用3.2.1编译Freeswitch的mod_soundtouch3.2.2启用 mod_so…

如何秒杀系统架构设计

原文路径:https://learn.lianglianglee.com/%e4%b8%93%e6%a0%8f/%e5%a6%82%e4%bd%95%e8%ae%be%e8%ae%a1%e4%b8%80%e4%b8%aa%e7%a7%92%e6%9d%80%e7%b3%bb%e7%bb%9f/00%20%e5%bc%80%e7%af%87%e8%af%8d%20%e7%a7%92%e6%9d%80%e7%b3%bb%e7%bb%9f%e6%9e%b6%e6%9e%84%e8%ae%be%e8%ae%…

为什么选择海外服务器?

如何选择跨境电商服务器&#xff1a;详细指南 选择合适的服务器是跨境电商企业成功的基础。服务器的性能和稳定性直接影响着网站的访问速度、用户体验和安全性&#xff0c;进而影响着企业的销量和利润。那么&#xff0c;跨境电商企业该如何选择服务器呢&#xff1f; ​​​​​…

WeTrade 在印度尼西亚井里汶成功举办研讨会

端午安康!在这欢乐的假日里&#xff0c;WeTrade和各位投资者分享一则喜事!如果有意参加的&#xff0c;可以联系小编! 5 月底&#xff0c;我们在印度尼西亚井里汶成功举办了一场精彩研讨会&#xff0c;聚集了来自印度尼西亚各地交易社区的100多名交易者。 此次研讨会由经验丰富…

【博士每天一篇文献-综述】Modularity in Deep Learning A Survey

阅读时间&#xff1a;2023-12-8 1 介绍 年份&#xff1a;2023 作者&#xff1a;孙浩哲&#xff0c;布朗克斯医疗卫生系统 会议&#xff1a; Science and Information Conference 引用量&#xff1a;4 论文主要探讨了深度学习中的模块化&#xff08;modularity&#xff09;概念…

Linux - 信号概念 信号产生

Linux - 信号概念 & 信号产生 信号概念信号产生软件信号killraiseabortalarm 硬件信号键盘产生信号硬件中断 信号概念 信号是进程之间事件异步通知的一种方式 在Linux命令行中&#xff0c;我们可以通过ctrl c来终止一个前台运行的进程&#xff0c;其实这就是一个发送信号的…

AI全栈工程师的新舞台:Coze(扣子)

前言 在当前科技飞速发展的背景下&#xff0c;Coze作为一款引领潮流的AI应用平台&#xff0c;正以破竹之势重塑着我们对于智能应用的认知。Coze不仅仅是一个工具&#xff0c;它是一个集合了前沿AI技术、高效开发环境与创意无限的应用生态于一体的创新平台&#xff0c;旨在让每…

ctfshow-web入门-命令执行(web53-web55)

目录 1、web53 2、web54 3、web55 1、web53 这里的代码有点不一样&#xff0c;说一下这两种的区别&#xff1a; &#xff08;1&#xff09;直接执行 system($c); system($c);这种方式会直接执行命令 $c 并将命令的输出直接发送到标准输出&#xff08;通常是浏览器&#xff…

如何理解external

external 函数应该只被外部函数调用但也可以被内部调用&#xff0c;但是这种内部调用也是有外部调用机制&#xff0c;即新产生message! 例子1 // SPDX-License-Identifier: GPL-3.0pragma solidity >0.8.2 <0.9.0;contract ExternalDemo{address public caller;functi…

【Activiti7系列】基于Spring Security的Activiti7工作流管理系统简介及实现(附源码)(下篇)

作者&#xff1a;后端小肥肠 上篇&#xff1a;【Activiti7系列】基于Spring Security的Activiti7工作流管理系统简介及实现&#xff08;上篇&#xff09;_spring security activiti7-CSDN博客 目录 1.前言 2. 核心代码 2.1. 流程定义模型管理 2.1.1. 新增流程定义模型数据 …

【qsort函数】

前言 我们要学习qsort函数并利用冒泡函数仿照qsort函数 首先我们要了解一下qsort&#xff08;快速排序&#xff09; 这是函数的的基本参数 void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*)); 简单解释一下 base&#xff1a;指向…

自动化搭建专属 AI 绘图服务

通义万相AIGC技术已经比较成熟&#xff0c;结合阿里云的计算和存储产品可以方便的搭建自己专属的 AI 绘图服务。例如《创意加速器&#xff1a;AI 绘画创作》这个解决方案&#xff0c;利用阿里自研的通义万相AIGC技术在 Web 服务中实现先进的图像生成。 AI 绘画服务搭建步骤 从…

【文档智能 RAG】RAG增强之路:增强PDF解析并结构化技术路线方案及思路

前言 现阶段&#xff0c;尽管大模型在生成式问答上取得了很大的成功&#xff0c;但由于大部分的数据都是私有数据&#xff0c;大模型的训练及微调成本非常高&#xff0c;RAG的方式逐渐成为落地应用的一种重要的选择方式。然而&#xff0c;如何准确的对文档进行划分chunks&…

Golang的协程调度器GMP

目录 GMP 含义 设计策略 全局队列 P的本地队列 GMP模型以及场景过程 场景一 场景2 场景三 场景四 场景五 场景六 GMP 含义 协程调度器&#xff0c;它包含了运行协程的资源&#xff0c;如果线程想运行协程&#xff0c;必须先获取P&#xff0c;P中还包含了可运行的G…