首页 > 其他分享 >静态数据成员/静态成员函数/运算符重载

静态数据成员/静态成员函数/运算符重载

时间:2024-06-11 20:28:26浏览次数:9  
标签:静态数据 RMB const fen 成员 运算符 other yuan mao

搭建一个货币的场景,创建一个名为 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 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);
private:
    int yuan;
    int mao;
    int fen;
    static int count;
public:
    RMB(){
    }
    RMB(int yuan,int mao,int fen):yuan(yuan),mao(mao),fen(fen){
        count++;
    }
    RMB(const RMB &other):yuan(other.yuan),mao(other.mao),fen(other.fen){
        count++;
    }
    RMB &operator=(const RMB &other){
        if(this!=&other){
            yuan=other.yuan;
            mao=other.mao;
            fen=other.fen;
            count++;
        }
        return *this;
    }
    ~RMB(){}
    static void show_count(){
        cout << "当前RMB数量" << count << endl;
    }
    const RMB operator--(int){
        RMB temp;
        temp.yuan=yuan--;
        temp.mao=mao--;
        temp.fen=fen--;
        return temp;
    }
    void show(){
        cout << yuan << "元" << mao << "毛" << fen << "分" << endl;
    }
};
int RMB::count=0;
//全局函数实现运算符重载
const RMB operator+(const RMB &L,const RMB &R){
    RMB temp;
    temp.yuan=L.yuan+R.yuan;
    temp.mao=L.mao+R.mao;
    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.mao=L.mao-R.mao;
    temp.fen=L.fen-R.fen;
    return temp;

}
bool operator>(const RMB &L,const RMB &R){
    if(L.yuan > R.yuan){
        return true;
    }else if(L.yuan == R.yuan && L.mao > R.mao){
        return true;
    }else if(L.yuan == R.yuan && L.mao == R.mao && L.fen > R.fen){
             return true;
         }else{
        return false;
    }
}
RMB &operator--(RMB &O){
    --O.yuan;
    --O.mao;
    --O.fen;
    return O;
}
int main()
{
    RMB R1(5,1,1);
    RMB R2(5,3,3);
    if(R2>R1){
       cout << "R2 > R1" << endl;
    }
    RMB R3;
    R3=--R2;
    RMB R4;
    R4=R2--;
    RMB R5=--R2;
    R5.show();
    RMB::show_count();
    return 0;
}

标签:静态数据,RMB,const,fen,成员,运算符,other,yuan,mao
From: https://blog.csdn.net/DJQ2020391635/article/details/139577821

相关文章

  • C# 字段 属性 方法 构造函数 索引器 事件 嵌套类型 常量 运算符重载
    字段声明字段字段初始化静态字段常量字段只读字段字段的访问然而属性声明属性自动实现的属性只读属性只写属性属性的逻辑处理属性的访问修饰符属性和字段的区别属性的用途总结索引器索引器的基本语法使用索引器索引器的关键点语法参数访问和设置异常处理性能重载使用......
  • C++11 运算符的优先级分组和结合性
    本文汇总了C++11中的运算符的含义、优先级分组及其结合性。如果两个运算符用于同一个操作数,首先应用优先极高的。如果两个运算符优先级相同,按结合性规则决定应用那个运算符。同一组中的运算符优先级和结合性相同,无论先左后右(L-R),还是先右后左(R-L)。运算符含义优先级分组......
  • java小记-三元运算符
    ①三元运算符:之前之后:格式:范例:......
  • 第五章: 梳理Java 中各种运算符(Operator)的使用
    1.运算符的分类:运算符是一种特殊的符号,用以表示数据的运算,赋值和比较运算符按照功能可以分为:算术运算符比较(关系)运算符逻辑运算符赋值运算符位运算符三元运算符Lambda运算符(以后再说)分类运算符算术运算符(7个)+,-,*,/,%,++,–赋值运算符(12个)=,......
  • Java 程序结构 -- Java 语言的变量、方法、运算符与注释
    大家好,我是栗筝i,这篇文章是我的“栗筝i的Java技术栈”专栏的第003篇文章,在“栗筝i的Java技术栈”这个专栏中我会持续为大家更新Java技术相关全套技术栈内容。专栏的主要目标是已经有一定Java开发经验,并希望进一步完善自己对整个Java技术体系来充实自己的......
  • 【C++修行之道】类和对象(四)运算符重载
    目录一、运算符重载函数重载和运算符重载有什么关系?二、.*运算符的作用三、运算符重载的正常使用四、重载成成员函数五、赋值运算符重载1.赋值运算符重载格式传值返回和引用返回有没有办法不生成拷贝?2.赋值运算符只能重载成类的成员函数不能重载成全局函数3.用户......
  • Java中运算符的详细介绍
    在Java编程中,运算符是执行各种操作的符号。Java提供了丰富的运算符来处理不同类型的操作。本文将详细介绍Java中的各种运算符,包括算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元运算符和类型运算符,并通过代码示例帮助理解这些运算符的使用方法。一、算术......
  • C++20 新特性: 三向比较运算符
    目录标题功能和用法示例代码如何重载三向比较运算符示例:重载三向比较运算符注意事项结语C++20引入了一种新的比较运算符,称为“三向比较运算符”或“太空船运算符”,其符号为<=>。这个运算符提供了一种简化方式来同时比较两个值的相等性、小于和大于状态。这一特......
  • Python 运算符重载
    在Python中,运算符重载是一种允许你定义或修改内置运算符(例如+,-,*,/等)在自定义类中的行为的技术。通过重载运算符,你可以使这些运算符对自定义对象执行特定的操作。运算符重载是通过在类中定义特殊方法(也称为魔法方法)来实现的,这些方法通常以双下划线开头和结尾。以下是一些常......
  • 相等运算符
    相等运算符用来比较相同类型的数据时,与严格相等运算符完全一样。1==1.0//等同于1===1.0比较不同类型的数据时,相等运算符会先将数据进行类型转换,然后再用严格相等运算符比较。下面分成几种情况,讨论不同类型的值互相比较的规则。(1)原始类型值原始类型的值会转换成数值再......