C++ 5
搭建一个货币的场景,创建一个名为 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。
#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){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){if(yuan+0.1*jiao+0.01*fen > R.yuan+0.1*R.jiao+0.01*R.fen)return true;elsereturn false;}//前置减减const 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 void get_count(){cout << "count=" << count << endl;}void show(){cout << yuan << " " << jiao << " " << fen << endl;}~RMB(){count--;}};int RMB::count = 0;int main()
{RMB s1(1, 1, 1);RMB s2(10, 10, 10);RMB s3(100, 100, 100);cout << "s1= ";s1.show();cout << "s2= ";s2.show();cout << "s3= ";s3.show();RMB::get_count();cout << "======重载算术运算符+==============" << endl;RMB s4 = s1+s2;cout << "s4=s1+s2: ";s4.show();cout << endl;cout << "======重载算术运算符-==============" << endl;RMB s5 = s2-s1;cout << "s5=s2-s1: ";s5.show();cout << endl;cout << "======重载算术运算符>==============" << endl;if(s2>s1){cout << "s2>s1" << endl;}cout << endl;cout << "======重载前置减减运算符--==============" << endl;--s3;cout << "--s3= ";s3.show();cout << endl;cout << "======重载后置减减运算符--==============" << endl;RMB s6;s6 = s3--;cout << "s6=s3--: ";s6.show();cout << "s3= ";s3.show();cout << endl;cout << "======当前已创建的RMB对象的数量==============" << endl;RMB::get_count();RMB *s7 = new RMB{2,2,2};RMB::get_count();delete(s7);RMB::get_count();return 0;
}