1> 思维导图
2>
搭建一个货币的场景,创建一个名为 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);
friend const RMB operator--(RMB &R, int);
private:
int yuan;
int jiao;
int fen;
static int count;
public:
RMB()
{
cout << "账户:" <<++count <<endl;
}
RMB(int yuan,int jiao,int fen) :yuan(yuan),jiao(jiao),fen(fen)
{
cout << "账户:" <<++count <<endl;
}
~RMB()
{
count--;
}
void show()
{
cout << "yuan = " << yuan << " jiao = " << jiao<< " fen = " << fen <<endl;
cout << "count = " << count << endl;
}
};
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;
if(temp.jiao>10){
temp.jiao = temp.jiao - 10;
temp.yuan++;
}
temp.fen =L.fen + R.fen;
if(temp.fen>10){
temp.fen = temp.fen - 10;
temp.jiao++;
}
if(temp.jiao>10){
temp.jiao = temp.jiao - 10;
temp.yuan++;
}
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;
if(temp.jiao<0){
temp.jiao = temp.jiao + 10;
temp.yuan--;
}
temp.fen =L.fen + R.fen;
if(temp.fen<0){
temp.fen = temp.fen + 10;
temp.jiao--;
}
if(temp.jiao<0){
temp.jiao = temp.jiao +10;
temp.yuan--;
}
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;
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
const RMB operator--(RMB &R, int)
{
RMB temp;
if(R.yuan >= 1)
{
temp.yuan = R.yuan--;
}
if(R.jiao >= 1)
{
temp.jiao = R.jiao--;
}else if(R.jiao == 0)
{
R.jiao = 9;
temp.yuan = R.yuan--;
}
if(R.fen >= 1)
{
temp.fen = R.fen--;
}else if(R.fen == 0)
{
R.fen = 9;
temp.jiao = R.jiao--;
}
return temp;
}
RMB &operator--(RMB &O)
{
if(O.yuan >= 1)
{
--O.yuan;
}
if(O.jiao >= 1)
{
--O.jiao;
}else if(O.jiao == 0)
{
O.jiao = 9;
--O.yuan;
}
if(O.fen >= 1)
{
--O.fen;
}else if(O.fen == 0)
{
O.fen = 9;
--O.jiao;
}
return O;
}
int main()
{
RMB p1(20,2,8);
p1.show();
RMB p2(12,1,6);
p2.show();
RMB p3 = p1+p1;
p3.show();
RMB p4 = p1-p2;
p4.show();
if(p1>p2)
{
cout << "p1>p2" <<endl;
}
RMB p5(6,1,9);
p5.show();
RMB p6 = --p5;
p6.show();
RMB p7 = p2--;
p7.show();
return 0;
}