一、作业
搭建一个货币的场景,创建一个名为 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++;
cout << "类的数量为: " << count << endl;
}
//有参构造函数
RMB(int yuan, int jiao, int fen):yuan(yuan),jiao(jiao),fen(fen)
{
cout << "RMB::有参构造函数 " << endl;
count++;
cout << "类的数量为: " << count << endl;
}
//析构函数
~RMB()
{
cout << "RMB::析构函数 " << endl;
count--;
cout << "类的数量为: " << count << endl;
}
void show()
{
cout << "元: " << yuan << " " << endl;
cout << "角: " << jiao << " " << endl;
cout << "分: " << fen << " " << endl;
}
//算术运算符+
const RMB operator+(const RMB &R)
{
RMB temp;
temp.yuan = yuan + R.yuan;
temp.jiao = jiao + R.jiao;
temp.fen = fen + R.fen;
return temp;
}
//算术运算符-
const RMB operator-(const RMB &R)
{
RMB temp;
temp.yuan = yuan - R.yuan;
temp.jiao = jiao - R.jiao;
temp.fen = fen - R.fen;
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;
}
//后置自减
RMB operator--(int)
{
RMB temp;
temp.yuan = yuan--;
temp.jiao = jiao--;
temp.fen = fen--;
return temp;
}
};
int RMB::count = 0;
int main()
{
RMB r1(2,3,5);
r1.show();
cout << "----------------" << endl;
RMB r2(2,3,4);
RMB r3(2,1,3);
RMB r4 = r2 + r3;
r4.show();
cout << "----------------" << endl;
RMB r5 = r2 - r3;
r5.show();
cout << "----------------" << endl;
if( r2 > r3)
{
cout << "r2 > r3 " << endl;
}
else
cout << "r2 !> r3 " << endl;
cout << "----------------" << endl;
r2--;
r2.show();
cout << "----------------" << endl;
--r3;
r3.show();
return 0;
}
运行结果:
![](https://i-blog.csdnimg.cn/direct/dea98783d5984bd587fc717c1003b601.png)
二、思维导图
![](https://i-blog.csdnimg.cn/direct/2dece14433b749fb88d85bd5afd1a28e.png)