6.7 作业

时间:2024-06-11 07:12:09

搭建一个货币的场景,创建一个名为 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 的类,该类具有整型私有成员变量 yuan(元)、jiao(角)和 fen(分),并且具有以下功能:
class RMB
{
private://私有
    double yuan; //元
    double jiao; //角
    double fen;  //分
    static int count; // 数 静态数据成员
    //角分的进位函数
    void carry()
    {
        if(fen >= 10)
        {
            fen -= 10;
            jiao++;
        }
        if(jiao >= 10)
        {
            jiao -= 10;
            yuan++;
        }
    }
    //角分的借位处理
    void borrow()
    {
        if(fen < 0)
        {
            jiao--;//从角借位
            fen += 10;//借来的一角转十分
        }
        if(jiao < 0)
        {
            yuan--;//从元借位
            jiao += 10;//借来的一元转十角
        }
    }

public://公共
    RMB(){} //无参构造
    RMB(double y,double j,double f):yuan(y),jiao(j),fen(f)//有参构造
    {
        carry();
        ++count;
    }

    void show() //显示RMB对象的值
    {
        cout << yuan << "元" << jiao << "角" << fen << "分" << endl;
    }
    ~RMB() //析构函数
    {
        --count;
    }
    //(1)重载算术运算符 + 和 -,使得可以对两个 RMB 对象进行加法和减法运算,并返回一个新的 RMB 对象作为结果。
    //成员函数实现 + 号运算符重载
    const RMB operator+(const RMB &R)const
    {
        RMB temp;//定义一个新的RMB对象
        temp.yuan = yuan + R.yuan;
        temp.jiao = jiao + R.jiao;
        temp.fen = fen + R.fen;
        temp.carry();//调用进位函数
        return temp;//返回temp对象
    }
    //成员函数实现 - 号运算符重载
    const RMB operator-(const RMB &R)const
    {
        RMB temp1;//定义一个新的RMB对象
        temp1.yuan = yuan - R.yuan;
        temp1.jiao = jiao - R.jiao;
        temp1.fen = fen - R.fen;
        temp1.borrow();// 调用借位函数
        return temp1;//返回temp1对象
    }
    //(2)重载关系运算符 >,判断一个 RMB 对象是否大于另一个 RMB 对象,并返回 true 或 false。
    //成员函数实现 > 号运算符重载
    bool operator>(const RMB &R)const
    {
        if(yuan > R.yuan)
        {
            return true;
        }
        else if(yuan == R.yuan &&  jiao > R.jiao)
        {
            return true;
        }
        else if(yuan == R.yuan && jiao == R.jiao &&  fen > R.fen)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    //(3)重载前置减减运算符 --,使得每次调用时 RMB 对象的 yuan、jiao 和 fen 分别减 1
    //成员函数实现 前置-- 号运算符重载
    RMB& operator--()
    {
        --yuan;
        --jiao;
        --fen;
        return  *this;
    }
    //(4)重载后置减减运算符 --,使得每次调用时 RMB 对象的 yuan、jiao 和 fen 分别减 1
    //成员函数实现 后置-- 号运算符重载
    const RMB operator--(int)
    {
        RMB temp2;
        temp2.yuan = yuan--;
        temp2.jiao = jiao--;
        temp2.fen = fen--;
        return temp2;
    }
    //(5)另外, RMB 类还包含一个静态整型成员变量 count,用于记录当前已创建的 RMB 对象的数量。
       //每当创建一个新的 RMB 对象时,count 应该自增 1;每当销毁一个 RMB 对象时,count 应该自减 1。

    //获取RMB 对象的数量
    static int getcount()
    {
        return count;
    }
};

int RMB::count = 0;//定义并初始化静态成员变量 count
int main()
{
    //在main 函数中测试上述RMB 类的功能
    RMB money1(10,7,6);
    RMB money2(6,9,5);

    money1.show();
    money2.show();
    cout << "---------------------------------" << endl;
    RMB sum1 = money1 + money2;
    sum1.show();
    cout << "---------------------------------" << endl;
    RMB sum2 = money1 - money2;
    sum2.show();
    cout << "---------------------------------" << endl;
    if(money1 > money2)
    {
        cout << "money1 > money2" << endl;
    }
    else
    {
        cout << "money1 < money2" << endl;
    }
    cout << "---------------------------------" << endl;
    --money1;
    money1.show();
    --money2;
    money2.show();
    cout << "---------------------------------" << endl;
    money1--;
    money1.show();
    money2--;
    money2.show();
    cout << "---------------------------------" << endl;
    cout << "创建的RMB对象的数量:" << RMB::getcount() << endl;
    return 0;
}

运算结果