嵌入式学习

笔记

作业 

        搭建一个货币的场景,创建一个名为 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+(const RMB &L, const RMB &R);
    friend const RMB operator-(const RMB &L, const RMB &R);
    friend bool operator>(const RMB &L, const RMB &R);
    friend RMB &operator--(RMB &O);
    friend const RMB operator--(RMB &O,int);

private:
    double yuan;
    double jiao;
    double fen;
    static int count;

public:
    //无参构造函数
    RMB()
    {
        count++;
    }
    //有参构造函数
    RMB(double yuan, double jiao, double fen):yuan(yuan),jiao(jiao),fen(fen)
    {
        count++;
    }
    //析构函数
    ~RMB()
    {
        count--;
    }

    //显示当前对象的 yuan jiao fen
    void display()
    {
        cout <<"yuan=" << yuan << " " << "jiao=" << jiao << " " << "fen=" << fen << endl;
    }

    //静态成员函数,显示当前存在的 RMB对象 数量
    static int count_current()
    {
        cout << "RMB类对象现存数量:" << count << endl;
    }

    //成员函数实现 “+” 重载
//    const RMB operator+(const RMB &R)const
//    {
//        RMB temp;
//        temp.yuan = yuan + R.yuan;
//        temp.jiao = jiao + R.jiao;
//        temp.fen = fen + R.fen;
//        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;
//        return temp;
//    }

    //成员函数实现 “>” 重载
//    bool operator>(const RMB &R)const
//    {
//        return (yuan>R.yuan && jiao>R.jiao && fen>R.fen);
//    }

    //成员函数实现 前-- 重载
//    RMB &operator--()
//    {
//        --yuan;
//        --jiao;
//        --fen;
//        return *this;
//    }

    //成员函数实现 后-- 重载
//    const RMB operator--(int)
//    {
//        RMB temp;
//        temp.yuan = yuan--;
//        temp.jiao = jiao--;
//        temp.fen = fen--;
//        return temp;
//    }
};

//静态数据成员初始化
int RMB::count = 0;

//全局函数实现 “+” 重载
const RMB operator+(const RMB &L, const RMB &R)
{
    RMB temp;
    temp.yuan = L.yuan + R.yuan;
    temp.jiao = L.jiao + R.jiao;
    temp.fen = L.fen + R.fen;
    return temp;
}

//全局函数实现 “-” 重载
const RMB operator-(const RMB &L, const RMB &R)
{
    RMB temp;
    temp.yuan = L.yuan - R.yuan;
    temp.jiao = L.jiao - R.jiao;
    temp.fen = L.fen - R.fen;
    return temp;
}

//全局函数实现 “>” 重载
bool operator>(const RMB &L, const RMB &R)
{
    return (L.yuan>R.yuan && L.jiao>R.jiao && L.fen>R.fen);
}

//全局函数实现 前-- 重载
RMB &operator--(RMB &O)
{
    --O.yuan;
    --O.jiao;
    --O.fen;
    return O;
}

//全局函数实现 后-- 重载
const RMB operator--(RMB &O,int)
{
    RMB temp;
    temp.yuan = O.yuan--;
    temp.jiao = O.jiao--;
    temp.fen = O.fen--;
    return temp;
}


int main()
{
//    RMB r1(11, 5, 6);
//    RMB r2(10, 3, 4);
//    RMB::count_current();

//    RMB r3 = r1 + r2;//“+” 重载
//    r3.display();

//    cout << "===================" << endl;

//    RMB r4 = r1 - r2;//“-” 重载
//    r4.display();

//    cout << "===================" << endl;

//    //“>” 重载
//    if(r1 > r2)
//    {
//        cout << "r1 > r2" << endl;
//    }else {
//        cout << "r1 <= r2" << endl;
//    }

//    cout << "===================" << endl;

//    RMB r5 = --r1;//前-- 重载
//    r5.display();
//    r1.display();

//    cout << "===================" << endl;

//    RMB r6 = r2--;//后-- 重载
//    r6.display();
//    r2.display();



    RMB *r1 =new RMB(11, 5, 6);
    RMB *r2 = new RMB(10, 3, 4);
    RMB::count_current();

    RMB *r3 = new RMB(*r1 + *r2);//“+” 重载
    r3->display();

    cout << "===================" << endl;

    RMB *r4 = new RMB(*r1 - *r2);//“-” 重载
    r4->display();
    RMB::count_current();

    cout << "===================" << endl;

    cout << "回收r3" << endl;
    delete r3;
    RMB::count_current();
    cout << "回收r4" << endl;
    delete r4;
    RMB::count_current();

    cout << "===================" << endl;

    //“>” 重载
    if(*r1 > *r2)
    {
        cout << "r1 > r2" << endl;
    }else {
        cout << "r1 <= r2" << endl;
    }

    cout << "===================" << endl;

    //RMB *r5 = new RMB(--(*r1));//前-- 重载    执行这一句分配时有问题,少一个
    RMB *r5 = new RMB;
    *r5 = --(*r1);
    r5->display();
    r1->display();
    RMB::count_current();

    cout << "===================" << endl;

    RMB *r6 = new RMB((*r2)--);//后-- 重载
    r6->display();
    r2->display();
    RMB::count_current();

    cout << "===================" << endl;

    cout << "回收全部类对象" << endl;
    delete r1;
    delete r2;
    delete r5;
    delete r6;
    RMB::count_current();

    return 0;
}

执行结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值