1.思维导图
搭建一个货币的场景,创建一个名为 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()
{
cout << "RMB::无参构造函数" << endl;
count++;
}
RMB(int y,int j,int f):yuan(y),jiao(j),fen(f)
{
cout << "RMB::有参构造函数" << endl;
count++;
}
RMB(const RMB &other):yuan(other.yuan),jiao(other.jiao),fen(other.fen)
{
cout << "RMB::拷贝构造函数" << endl;
count++;
}
~RMB()
{
cout << "RMB::析构函数" << endl;
count--;
}
const RMB operator-(const RMB &other)
{
int sum1 = yuan*100 + jiao*10 + fen;
int sum2 = other.yuan + other.jiao*10 + other.fen;
int sub = sum1 - sum2;
int sub_yuan = sub/100;
sub %= 100;
int sub_jiao = sub/10;
int sub_fen = sub%10;
return RMB(sub_yuan,sub_jiao,sub_fen);
}
const RMB operator+(const RMB &other)
{
int sum1 = yuan*100 + jiao*10 + fen;
int sum2 = other.yuan + other.jiao*10 + other.fen;
int sum = sum1 + sum2;
int sum_yuan = sum/100;
sum %= 100;
int sum_jiao = sum/10;
int sum_fen = sum%10;
return RMB(sum_yuan,sum_jiao,sum_fen);
}
bool operator>(const RMB &other)const
{
int sum1 = yuan*100 + jiao*10 + fen;
int sum2 = other.yuan + other.jiao*10 + other.fen;
if(sum1 > sum2)
{
return true;
}
else
{
return false;
}
}
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 show()
{
cout << yuan << "元" << jiao << "角" << fen << "分" << endl;
}
void count_show()
{
cout << "count=" << count << endl;
}
};
int RMB::count = 0;
int main()
{
RMB r1(3,3,3);
RMB r2(8,8,8);
RMB r3 = r1 + r2;
RMB r4 = r2 - r1;
r1--;
--r2;
if(r3>r4)
{
cout << "r3>r4" << endl;
}
r1.show();
r2.show();
r3.show();
r4.show();
r3.count_show();
r4.count_show();
return 0;
}