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;
class RMB {
private:
    int yuan;
    int jiao;
    int fen;

public:
    static int count;

    RMB(int y = 0, int j = 0, int f = 0) : yuan(y), jiao(j), fen(f) {
        count++;
    }

    ~RMB() {
        count--;
    }
    int getYuan() const { return yuan; }
    int getJiao() const { return jiao; }
    int getFen() const {return fen; }

    RMB operator+(const RMB& other) {
        int totalYuan = yuan + other.yuan;
        int totalJiao = jiao + other.jiao;
        int totalFen = fen + other.fen;

        if (totalFen >= 10) {
            totalJiao += totalFen / 10;
            totalFen %= 10;
        }

        if (totalJiao >= 10) {
            totalYuan += totalJiao / 10;
            totalJiao %= 10;
        }

        return RMB(totalYuan, totalJiao, totalFen);
    }

    RMB operator-(const RMB& other) {
        int totalYuan = yuan - other.yuan;
        int totalJiao = jiao - other.jiao;
        int totalFen = fen - other.fen;

        if (totalFen < 0) {
            totalJiao--;
            totalFen += 10;
        }

        if (totalJiao < 0) {
            totalYuan--;
            totalJiao += 10;
        }

        return RMB(totalYuan, totalJiao, totalFen);
    }

    bool operator>(const RMB& other) {
        if (yuan > other.yuan) {
            return true;
        } else if (yuan == other.yuan && jiao > other.jiao) {
            return true;
        } else if (yuan == other.yuan && jiao == other.jiao && fen > other.fen) {
            return true;
        }
        return false;
    }

    RMB& operator--() {
        yuan--;
        jiao--;
        fen--;
        if (fen < 0) {
            jiao--;
            fen += 10;
        }

        if (jiao < 0) {
            yuan--;
            jiao += 10;
        }
        return *this;
    }

    RMB operator--(int) {
        RMB temp(*this);
        yuan--;
        jiao--;
        fen--;
        if (fen < 0) {
            jiao--;
            fen += 10;
        }

        if (jiao < 0) {
            yuan--;
            jiao += 10;
        }
        return temp;
    }
};

int RMB::count = 0;

int main() {
    RMB rmb1(10, 9, 8);
    RMB rmb2(5, 8, 6);

    RMB sum = rmb1 + rmb2;
    std::cout << "相加结果: " << sum.getYuan() << " 元 " << sum.getJiao() << " 角 " << sum.getFen() << " 分" << std::endl;

    RMB diff = rmb1 - rmb2;
    std::cout << "相减结果: " << diff.getYuan() << " 元 " << diff.getJiao() << " 角 " << diff.getFen() << " 分" << std::endl;

    if (rmb1 > rmb2) {
        std::cout << "rmb1 大于 rmb2" << std::endl;
    } else {
        std::cout << "rmb1 不大于 rmb2" << std::endl;
    }

    --rmb1;
    std::cout << "前置--后 rmb1: " << rmb1.getYuan() << " 元 " << rmb1.getJiao() << " 角 " << rmb1.getFen() << " 分" << std::endl;

    RMB rmb3 = rmb1--;
    std::cout << "后置--后 rmb1: " << rmb1.getYuan() << " 元 " << rmb1.getJiao() << " 角 " << rmb1.getFen() << " 分" << std::endl;
    std::cout << "后置--产生的新对象 rmb3: " << rmb3.getYuan() << " 元 " << rmb3.getJiao() << " 角 " << rmb3.getFen() << " 分" << std::endl;

    std::cout << "当前 RMB 对象数量: " << RMB::count << std::endl;

    return 0;
}

  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值