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 RMB const operator+(const RMB &L,const RMB &R);
friend const RMB operator-(const RMB &L,const RMB &R);
friend RMB &operator--(RMB&R);
friend const RMB operator--(RMB &R,int);
private:
int yuan,jiao,fen;
static int count;
public:
//静态成员函数获取账户个数
static int getcount()
{
return RMB::count;
}
//用于处理元角分的加
static int adjust (int a,int b,int &borrow)
{
int sum = a+b;
if(sum >= 10)
{
sum -=10;
borrow = 1;
}else
{
borrow = 0;
}
return sum;
}
//用于处理元角分的减
static int dif(int a,int b,int &borrow)
{
int num = a-b;
if(num < 0)
{
num+=10;
borrow = 1;
}else
{
borrow = 0;
}
return num;
}
//无参构造函数
RMB(){
cout << "这是账户:" << ++count << endl;
}
//有参构造函数
RMB(int yuan,int jiao,int fen):yuan(yuan),jiao(jiao),fen(fen)
{
cout << "这是账户:" << ++count << endl;
}
//重载关系运算符>,判断一个RMB对象是否大于另一个RMB对象,并返回true或false。
bool operator>(const RMB &r) const
{
if(yuan > r.yuan)
{
return true;
}
else if(jiao > r.jiao)
{
return true;
}
else if(fen > r.fen)
{
return true;
}
else
{
return false;
}
}
void show()
{
cout << "当前金额为:" << yuan << "元" << jiao << "角" << fen << "分" << endl;
}
//析构函数
~RMB()
{
count--;
}
};
int RMB::count = 0; //静态数据成员必须在类外初始化
//重载算术运算符 +,使得可以对两个RMB对象进行加法和减法运算,并返回一个新的RMB对象作为结果
const RMB operator+(const RMB &L,const RMB &R){
RMB temp;
int borrow_fen = 0, borrow_jiao = 0;
temp.fen = RMB::adjust(L.fen,R.fen,borrow_fen);
temp.jiao = RMB::adjust(L.jiao,R.jiao + borrow_fen,borrow_jiao);
temp.yuan= L.yuan + R.yuan + borrow_jiao;
return temp;
}
// 重载算术运算符-,使得可以对两个 RMB 对象进行加法和减法运算,并返回一个新的RMB对象作为结果
const RMB operator-(const RMB &L,const RMB &R)
{
RMB temp;
if((L > R)!=0)
{
int borrow_fen = 0, borrow_jiao = 0;
temp.fen = RMB::dif(L.fen,R.fen,borrow_fen);
temp.jiao = RMB::dif(L.jiao,R.jiao - borrow_fen,borrow_jiao);
temp.yuan= L.yuan - R.yuan - borrow_jiao;
return temp;
}else
{
cout << "金额过小,请重试!" << endl;
}
return temp;
}
//重载前置减减运算符 --,使得每次调用时RMB对象的yuan、jiao和fen分别减1
RMB &operator--(RMB&R)
{
if(R.yuan >= 1)
{
--R.yuan;
}
if(R.jiao >= 1)
{
--R.jiao;
}else if(R.jiao == 0)
{
R.jiao = 9;
--R.yuan;
}
if(R.fen >= 1)
{
--R.fen;
}else if(R.fen == 0)
{
R.fen = 9;
--R.jiao;
}
return R;
}
//重载后置减减运算符--,使得每次调用时RMB对象的yuan、jiao和fen分别减1
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;
}
int main()
{
RMB r1(8,6,7);
RMB r2(7,8,5);
RMB r3 = r1+r2;
r3.show();
if(r3>r2)
{
cout << "r3 > r2" << endl;
}
RMB r4 = r1-r2;
r4.show();
RMB r5 = r2-r1;
RMB r6(8,0,0);
RMB r7 = --r6;
r7.show();
RMB r8 = r2--;
r8.show();
cout << "当前账户个数为:" << RMB::getcount() << endl;
return 0;
}
运行结果:
标签:jiao,fen,C++,RMB,int,day05,--,yuan From: https://blog.csdn.net/m0_59481131/article/details/141066958