C++day5

思维导图

搭建一个货币的场景,创建一个名为 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
{
        friend bool operator> (const RMB &l,const RMB &r);
        friend istream &operator>>(istream &cin, RMB &r);
        friend void compare(const RMB &l,const RMB &r);
        friend RMB operator ++(RMB &u);
        friend const RMB operator --(RMB &u,int);
    private:
        int yuan;
        int jiao;
        int fen;
        string name;
        static int count;
    public:
        //无参构造函数
        RMB()
            {
                count++;
            }
        //有参构造函数,初始化用户名以及操作金额
        RMB(int yuan,int jiao,int fen,string name):yuan(yuan),jiao(jiao),fen(fen),name(name)
            {
                cout<<"用户"<<name<<"加入"<<endl<<"操作金额:"<<yuan<<"元"<<jiao<<"角"<<fen<<"分"<<endl<<"==============================="<<endl;
                count++;
            }
        //析构函数
        ~RMB()
            {
                count--;
            }
        //展示余额
        void show()
            {
                cout<<"用户:"<<name<<endl<<"余额:"<<yuan<<"元"<<jiao<<"角"<<fen<<"分"<<endl<<"==============================="<<endl;
            }
        //成员函数执行加操作
        const RMB operator+ (const RMB &r)const
            {
                RMB temp;
                temp.name=name;
                cout<<temp.name<<"执行'+'操作"<<endl<<"==============================="<<endl;
                temp.yuan=yuan+r.yuan;
                temp.jiao=jiao+r.jiao;
                temp.fen=fen+r.fen;
                //判断进位
                if(temp.fen>=10)
                    {
                        temp.fen-=10;
                        temp.jiao+=1;
                    }
                if(temp.jiao>=10)
                    {
                        temp.jiao-=10;
                        temp.yuan+=1;
                    }
                return temp;
            }
        //成员函数执行减操作
        const RMB operator- (const RMB &r)const
            {
                RMB temp;
                temp.name=name;
                cout<<temp.name<<"执行'-'操作"<<endl<<"==============================="<<endl;
                temp.yuan=yuan-r.yuan;
                temp.jiao=jiao-r.jiao;
                temp.fen=fen-r.fen;
                //判断借位
                if(temp.fen<0)
                    {
                        temp.fen+=10;
                        temp.jiao-=1;
                    }
                if(temp.jiao<0)
                    {
                        temp.jiao+=10;
                        temp.yuan-=1;
                    }
                if(temp.yuan<0)
                    {
                        cout<<"余额不足!"<<endl;
                    }
                return temp;
            }
};
//初始化静态变量count
int RMB::count=0;
//全局函数实现提取符重载
istream &operator>>(istream &cin, RMB &u)
{
    cin >>u.yuan>>u.jiao>>u.fen>>u.name;
    cout<<"用户"<<u.name<<endl<<"操作金额:"<<u.yuan<<"元"<<u.jiao<<"角"<<u.fen<<"分"<<endl<<"==============================="<<endl;
    return  cin;
}
//全局函数执行判断‘>’操作
bool operator> (const RMB &l,const RMB &r)
    {
        cout<<l.name<<"与"<<r.name<<"执行'>'操作"<<endl<<"==============================="<<endl;
        if(l.yuan>r.yuan)
            {
                return true;
            }
        else if(l.yuan==r.yuan)
            {
                if(l.jiao>r.jiao)
                    {
                        return true;
                    }
                else if(l.jiao==r.jiao)
                    {
                        if(l.fen>r.fen)
                            {
                                return true;
                            }
                        else
                            {
                                return false;
                            }
                    }
                else if(l.jiao<r.jiao)
                    {
                        return false;
                    }
            }
        else if(l.yuan<r.yuan)
            {
                return false;
            }
        return 1;//防止出现无返回值的情况
    }
//定义一个函数专门用来提示比较结果
void compare(const RMB &l,const RMB &r)
    {
        if(l>r)
            {
                cout<<l.name<<">"<<r.name<<endl<<"==============================="<<endl;
            }
        else
            {
                cout<<l.name<<"<"<<r.name<<endl<<"==============================="<<endl;
            }
    }
//全局函数实现前++运算符重载
RMB operator ++(RMB &u)
    {
        cout<<u.name<<"执行'前++'操作"<<endl<<"==============================="<<endl;
        u.yuan+=1;
        u.jiao+=1;
        u.fen+=1;
        if(u.fen>=10)
            {
                u.fen-=10;
                u.jiao+=1;
            }
        if(u.jiao>=10)
            {
                u.jiao-=10;
                u.yuan+=1;
            }
        return u;
    }
//全局函数实现后--运算符重载
const RMB operator --(RMB &u,int)
    {
        cout<<u.name<<"执行'后--'操作"<<endl<<"==============================="<<endl;
        RMB temp;
        temp.yuan=u.yuan--;
        temp.jiao=u.jiao--;
        temp.fen=u.fen--;
        if(u.fen<0)
            {
                u.fen+=10;
                u.jiao-=1;
            }
        if(u.jiao<0)
            {
                u.jiao+=10;
                u.yuan-=1;
            }
        if(u.yuan<0)
            {
                cout<<"余额不足!"<<endl;
            }
        return temp;
    }
int main()
    {
        RMB user1(10,8,9,"蔡徐坤");
        RMB add;
        cin>>add;
        RMB updateuser1;
        updateuser1=user1+add;
        updateuser1.show();
        RMB sub;
        cin>>sub;
        updateuser1=updateuser1-sub;
        updateuser1.show();
        RMB user2(8,6,9,"马嘉祺");
        compare(updateuser1,user2);
        ++user2;
        user2.show();
        RMB user3=user2--;
        user3.show();
        user2.show();
        return 0;
    }

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值