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;
}
相关推荐
d111111111d8 分钟前
在STM32中,中断服务函数的命名有什么要求?
笔记·stm32·单片机·嵌入式硬件·学习·c#
CryptoRzz13 分钟前
日本股票 API 对接实战指南(实时行情与 IPO 专题)
java·开发语言·python·区块链·maven
yugi98783814 分钟前
基于M序列的直扩信号扩频码生成方法及周期长码直扩信号的MATLAB实现方案
开发语言·matlab
乾元21 分钟前
基于时序数据的异常预测——短期容量与拥塞的提前感知
运维·开发语言·网络·人工智能·python·自动化·运维开发
江上清风山间明月22 分钟前
使用python将markdown文件生成pdf文件
开发语言·python·pdf
j_xxx404_25 分钟前
C++算法入门:二分查找合集(二分查找|在排序数组中查找元素的第一个和最后一个位置)
开发语言·c++
零一科技27 分钟前
然然管理系统-学习搭环境-本地先跑起来
学习
ss27328 分钟前
阻塞队列:ArrayBlockingQueue如何用Lock与Condition实现高效并发控制
开发语言·python
lizz3130 分钟前
C++操作符重载深度解析
java·c++·算法
CodeCraft Studio31 分钟前
Vaadin 25 正式发布:回归标准Java Web,让企业级开发更简单、更高效
java·开发语言·前端·vaadin·java web 框架·纯java前端框架·企业级java ui框架