作业-day-240607

思维导图

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;
}

运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】PuLID: Pure and Lightning ID Customization via Contrastive Alignment

论文&#xff1a;https://arxiv.org/abs/2404.16022 代码&#xff1a;https://github.com/ToTheBeginning/PuLID 文章目录 AbstractIntroductionRelated WorkMethods Abstract 我们提出了一种新颖的、无需调整的文本生成图像ID定制方法——Pure and Lightning ID customizatio…

北航第五次数据结构与程序设计编程题复习

北航第五次数据结构与程序设计编程题复习 树叶节点遍历&#xff08;树-基础题&#xff09;计算器&#xff08;表达式计算-表达式树实现&#xff09;服务优化词频统计&#xff08;树实现&#xff09; 树叶节点遍历&#xff08;树-基础题&#xff09; 【问题描述】 从标准输入中…

Golang的协程调度器GMP

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

Vue15-watch对比计算属性

一、姓名案例 1-1、watch实现 1-2、计算属性 对比发现&#xff1a; 计算属性比watch属性更简略一些。 1-3、计算属性 VS 侦听属性 1-4、需求变更 计算属性中不能开启异步任务&#xff01;&#xff01;&#xff01;因为计算属性靠return返回值。但是watch靠亲自写代码去改。 1-…

一款开源文件加速下载利器

前言 大文件的下载&#xff0c;浏览器支持不是很好&#xff0c;今天下载了一个20个G的文件&#xff0c;连续失败了好多次。 然后寻找到了一个开源的下载工具gospeed&#xff0c;可以完美的解决这个问题。而且下载速度快。 简介 Gopeed&#xff08;全称 Go Speed&#xff09;&am…

vscode copilot git commit 生成效果太差,用其他模型替换

问题 众所周知&#xff0c;copilot git commit 就像在随机生成 git commit 这种较为复杂的内容还是交给大模型做比较合适 方法 刚好&#xff0c;gitlens 最近开发了 AI commit的功能&#xff0c;其提供配置url api可以实现自定义模型 gitlens 只有3种模型可用&#xff1a…

重邮计算机网络803-(2)物理层

一.物理层 1.介绍 物理层的主要任务描述为确定与传输媒体的接口的一些特性&#xff0c;即&#xff1a; ①机械特性 指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。 ②电气特性 指明在接口电缆的各条线上出现的电压的范围。 ③功能特性 指明某条线上…

让AI做2024新高考1卷数学最后一题:AI智商横向对比!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

动手学深度学习4.10 实战Kaggle比赛:预测房价-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;实战 Kaggle 比赛&#xff1a;预测房价_哔哩哔哩_bilibili 本节教材地址&#xff1a;4.10. 实战Ka…

Keil软件仿真的使用

一、软件的初始化设置 初始设置可以按照下图&#xff0c;这里我使用的是STM32F103C8T6&#xff0c;所以单片机型号为STM32F103C8&#xff0c;这个设置在Debug目录下。然后进行时钟的设置&#xff0c;我们板上晶振为8M&#xff0c;这里将时钟改为8. 或许有人想问如果是别的型号单…

Vue3学习记录第三天

Vue3学习记录第三天 背景说明学习记录Vue3中shallowReactive()和shallowRef()Vue3中toRaw()和markRaw()前端...语法Vue3中readonly()和shallowReadonly()函数 背景 之前把Vue2的基础学了, 这个课程的后面有简单介绍Vue3的部分. 学习知识容易忘, 这里仅简答做一个记录. 内容都很…

# RocketMQ 实战:模拟电商网站场景综合案例(一)

RocketMQ 实战&#xff1a;模拟电商网站场景综合案例&#xff08;一&#xff09; 一、内容介绍 1、案例介绍&#xff1a; 1.1 业务分析 1&#xff09;下单业务 2&#xff09;支付业务 1.2 问题分析 2、技术分析 2.1 技术选型&#xff1a; 1&#xff09;SpringBoot 2&…

Zynq7000 系列FPGA模块化仪器

• 基于 XilinxXC7Z020 / 010 / 007S • 灵活的模块组合 • 易于嵌入的紧凑型外观结构 • 高性能的 ARM Cortex 处理器 • 成熟的 FPGA 可编程逻辑 &#xff0c;基于 IP 核的软件库 FPGA 控制器 Zynq7000 系列模块是基于 Xilinx XC7Z020/010/007S 全可编程片上系统 (SoC) 的…

【PPT技巧】PPT文件设置了修改权限,如何取消权限编辑文件?

不知道大家在使用PPT文件的时候&#xff0c;是否遇到过下面的提示框&#xff0c;这就是PPT文件设置了修改权限&#xff0c;只有输入密码才可以编辑文件。 如果我们没有输入密码&#xff0c;以只读方式进入&#xff0c;那么我们会发现功能栏中的按钮全是灰色&#xff0c;无法使用…

Vue3【二】 VSCode需要安装的Vue语法插件

VSCode需要安装的 适配Vue3的插件 Vue-Official插件安装

DeepSORT(目标跟踪算法)中的马氏距离详解(很详细)

DeepSORT&#xff08;目标跟踪算法&#xff09;中的马氏距离详解&#xff08;很详细&#xff09; flyfish 马氏距离的公式是由印度统计学家【普拉萨纳钱德拉马哈拉诺比斯&#xff08;Prasanta Chandra Mahalanobis&#xff09;】&#xff09;&#xff08;好长的名字&#xff…

STM32F103C8T6 HAL库 USART1 DMA方式接收数据

前言&#xff1a; 前面的两篇文章都说关于发送的&#xff0c;HAL库发送数据可以调用现成的函数&#xff0c;而接收数据&#xff0c;现成函数不太好用。这里为了记录了一下自己参考了网上几个大佬的代码&#xff0c;整理了一下USART1 DMA方式接受数据的代码&#xff0c;…

【python】OpenCV—Histogram Matching(9.2)

学习来自OpenCV基础&#xff08;17&#xff09;基于OpenCV、scikit-image和Python的直方图匹配 文章目录 直方图匹配介绍scikit-image 中的直方图匹配小试牛刀风格迁移 直方图匹配介绍 直方图匹配&#xff08;Histogram Matching&#xff09;是一种图像处理技术&#xff0c;旨…

一文详解大模型微调全流程

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

11-数组与指针深入理解——题型理解

11-数组与指针深入理解——题型理解 文章目录 11-数组与指针深入理解——题型理解一、理解题1二、理解题二三、理解题三四、理解题四五、理解题五六、理解题六 一、理解题1 #include <stdio.h>int main(void) {int (*p)[5] NULL; // 定义一个指向 拥有5个整型数据的数组…