思维导图
搭建一个货币的场景,创建一个名为 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
{
private:
int yuan;//元
int jiao;//角
int fen;//分
static int count;
public:
RMB()
{
count++;
}
RMB(int yuan,int jiao,int fen):yuan(yuan),jiao(jiao),fen(fen)
{
count++;
}
//重载运算符+
const RMB operator+(const RMB &R) const
{
RMB temp;
temp.fen = (fen + R.fen)%10;
temp.jiao = (jiao + R.jiao + (fen + R.fen)/10)%10;
temp.yuan = yuan + R.yuan + (jiao + R.jiao + (fen + R.fen)/10)/10;
return temp;
}
//重载运算符-
const RMB operator-(const RMB &R) const
{
RMB temp;
temp.yuan = yuan - R.yuan;
if(jiao>=R.jiao)
{
temp.jiao = jiao - R.jiao;
}
else
{
temp.jiao = jiao + 10 - R.jiao;
temp.yuan--;
}
if(fen>=R.fen)
{
temp.fen = fen - R.fen;
}
else
{
temp.fen = fen + 10 - R.fen;
temp.jiao--;
}
return temp;
}
//成员函数实现>号运算符重载
bool operator>(const RMB &R)const
{
if(yuan>R.yuan && jiao>R.jiao && fen>R.fen)
{
return true;
}
else
{
return false;
}
}
//前--运算符重载
RMB &operator--()
{
--yuan;
--jiao;
--fen;
return *this;
}
//后--运算符重载
const RMB operator--(int)
{
RMB temp;
temp.yuan = yuan--;
temp.jiao = jiao--;
temp.fen = fen--;
return temp;
}
static int getcount()
{
return count;
}
~RMB()
{
count--;
}
void show()
{
cout << yuan << "元" << jiao << "角" << fen << "分" << endl;
}
};
int RMB::count = 0;
int main()
{
RMB r1(5,5,5);
r1--;
r1.show();
--r1;
r1.show();
cout << "count:" << RMB::getcount() << endl;
RMB r2(3,6,9);
r2.show();
RMB r3;
r3=r1+r2;
r1=r3-r2;
r1.show();
r3.show();
cout << "count:" << RMB::getcount() << endl;
if(r3>r2)
{
cout << "r3>r2" << endl;
}
return 0;
}