c++相关学习

cpp 复制代码
#include <iostream>

using namespace std;

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:
    int temp;
    int yuan;
    int jiao;
    int fen;
    static int count;

    void normal()
    {
        if(fen>=10)
        {
            jiao+=1;
            fen-=10;
        }
            if(jiao>=10)
            {
                yuan+=1;
                jiao-=10;
            }
        if(jiao<0)
        {
            yuan-=1;
            jiao+=10;
        }
        if(fen<0)
        {
            jiao-=1;
            fen+=10;
        }

    }

public:
    //无参数
    RMB()
    {
        cout<<"rmb无参数"<<endl;
    }
    //有参数
    RMB(int yuan,int jiao,int fen):yuan(yuan),jiao(jiao),fen(fen)
    {
        cout<<"rmb有参数"<<endl;
        count++;
    }
    //析构函数
    ~RMB()
    {
        count--;
    }
    void display() const
        {
            cout << yuan << "元" << jiao << "角" << fen << "分" << endl;
        }
        // 获取当前对象数量
        static int getCount()
        {
            return count;
        }
};
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;
    temp.normal();
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;
    temp.normal();
    return temp;
}

bool operator >(const RMB &L,const RMB &R)
{
    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;
        }
    }

 return false;
}

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()
{
    cout << "创建对象前,对象数量:" << RMB::getCount() << endl;

       RMB p1(10, 5, 4);
       cout << "p1: ";
       p1.display();

       RMB p2(9, 5, 1);
       cout << "p2: ";
       p2.display();

       cout << "创建对象后,对象数量:" << RMB::getCount() << endl;

       RMB p3 = p1 + p2;
       cout << "p1 + p2: ";
       p3.display();

       RMB p4 = p1 - p2;
       cout << "p1 - p2: ";
       p4.display();

       cout << "p1 > p2: " << (p1 > p2 ? "true" : "false") << endl;

       RMB p5 = --p1;
       cout << "前置--p1后,p5: ";
       p5.display();
       cout << "p1: ";
       p1.display();

       RMB p6 = p2--;
       cout << "后置--p2后,p6: ";
       p6.display();
       cout << "p2: ";
       p2.display();

       cout << "当前对象数量:" << RMB::getCount() << endl;
    return 0;
}
相关推荐
海南java第二人2 分钟前
SpringBoot启动流程深度解析:从入口到容器就绪的完整机制
java·开发语言
星火开发设计6 分钟前
C++ queue 全面解析与实战指南
java·开发语言·数据结构·c++·学习·知识·队列
橘颂TA12 分钟前
【剑斩OFFER】算法的暴力美学——力扣 394 题:字符串解码
数据结构·c++·结构与算法
DICOM医学影像14 分钟前
2. go语言从零实现以太坊客户端-查询区块链账户余额
开发语言·golang·区块链·以太坊·web3.0·hardhat
Data_agent25 分钟前
Python 编程实战:函数与模块化编程及内置模块探索
开发语言·python
new_zhou25 分钟前
vs2019+qt工程中生成dump文件及调试
开发语言·qt·visual studio·dump调试
栈与堆1 小时前
LeetCode 19 - 删除链表的倒数第N个节点
java·开发语言·数据结构·python·算法·leetcode·链表
一路向北·重庆分伦1 小时前
03-01:MQ常见问题梳理
java·开发语言
如果你想拥有什么先让自己配得上拥有1 小时前
近似数的思考学习
学习
txinyu的博客1 小时前
结合游戏场景理解,互斥锁,读写锁,自旋锁,CAS / 原子变量,分段锁
开发语言·c++·游戏