搭建一个货币的场景,创建一个名为 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
{
private:
int yuan;
int jiao;
int fen;
static int count; //记录个数 静态数据成员
public:
RMB(){count++;}
//有参构造
RMB(int y, int j, int f):yuan(y), jiao(j), fen(f)
{
count++;
}
RMB(const RMB &other):yuan(other.yuan),jiao(other.jiao),fen(other.fen)
{
count++;
}
~RMB()
{
count--;
}
//重载-
const RMB operator-(const RMB &other)
{
int last1 = yuan*100 + jiao*10 + fen; //当前对象的分
int last2 = other.yuan*100 + other.jiao*10 + other.fen; //其他对象的分
int new_last = last1 - last2;
int new_yuan = new_last/100; //相减后的yuan
new_last %= 100;
int new_jiao = new_last/10; //相减后的jiao
int new_fen = new_last%10; //相减后的fen
return RMB(new_yuan, new_jiao, new_fen); //匿名对象 返回
}
//前--重载
RMB &operator--()
{
//从最小单位减
if(fen>0)
{
fen--;
}
else
{
if(jiao>0)
{
jiao--;
fen = 9;
}
else
{
if(yuan>0)
{
yuan--;
jiao = 9;
fen = 9;
}
else
{
cout << "没法减..." << endl;
}
}
}
return *this;
}
//后--重载
const RMB operator--(int)
{
RMB temp(*this);
--(*this);
return temp;
}
void display()
{
cout << yuan << " " << jiao << " " << fen <<endl;
}
void show_count()
{
cout << "count = " << count << endl;
}
};
int RMB::count = 0; //个数初始化为0
int main()
{
RMB r1(6, 6, 6);
RMB r2(2, 2, 2);
RMB r3 = r1 - r2;
r3.display();
r1.show_count();
r2.show_count();
r3.show_count();
return 0;
}