作业8/9~11

搭建一个货币的场景,创建一个名为 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 类的功能。

/*
 *搭建一个货币的场景,创建一个名为 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。
*/
#include <iostream>

using namespace std;

class RMB
{
private:
    int yuan; // 元
    int jiao; // 角
    int fen; // 分
    static int count; // 记录当前已创建的 RMB 对象的数量
public:
    // 构造函数
    RMB(int y = 0, int j = 0, int f = 0)
        : yuan(y), jiao(j), fen(f) {
        count++;
    }
    // 析构函数
    ~RMB() {
        count--;
    }
    // 显示函数
    void show() const {
        cout << "RMB: " << yuan << "元 " << jiao << "角 " << fen << "分" << endl;
    }
    // 重载 + 运算符
    RMB operator+(const RMB& other) const {
        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)  {
        *this = (RMB(0,0,0) + (*this));
        RMB temp = (RMB(0,0,0) + other);

        int totalYuan = this->yuan - temp.yuan;
        int totalJiao = this->jiao - temp.jiao;
        int totalFen = this->fen - temp.fen;

        return RMB(totalYuan, totalJiao, totalFen);
    }
    // 重载 > 运算符
    bool operator>(const RMB& other) const {
        if (yuan > other.yuan)
            return true;
        else if (yuan == other.yuan && fen > other.fen)
            return true;
        else if (fen == other.fen && jiao > other.jiao)
            return true;
        else
            return false;
     }
    // 重载前置 --运算符
    RMB& operator--() {
        if (fen > 0) {
            fen--;
        } else {
            jiao--;
            fen = 9;
        }
        if (jiao < 0) {
            yuan--;
            jiao = 9;
        }
        return *this;
        }
    // 重载后置 -- 运算符
    RMB operator--(int) {
        RMB temp(*this);
        --(*this);
        return temp;
        }
    // 获取 count
    static int getcount() {
        return count;
    }

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

int main()
{
    RMB r1(9, 10, 10);
    RMB r2(10, 6, 0);
    RMB r = r1 - r2;
    r.show();

    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值