搭建一个货币的场景,创建一个名为 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;
//搭建一个货币的场景,创建一个名为 RMB 的类,该类具有整型私有成员变量 yuan(元)、jiao(角)和 fen(分),并且具有以下功能:
class RMB
{
private://私有double yuan; //元double jiao; //角double fen; //分static int count; // 数 静态数据成员//角分的进位函数void carry(){if(fen >= 10){fen -= 10;jiao++;}if(jiao >= 10){jiao -= 10;yuan++;}}//角分的借位处理void borrow(){if(fen < 0){jiao--;//从角借位fen += 10;//借来的一角转十分}if(jiao < 0){yuan--;//从元借位jiao += 10;//借来的一元转十角}}public://公共RMB(){} //无参构造RMB(double y,double j,double f):yuan(y),jiao(j),fen(f)//有参构造{carry();++count;}void show() //显示RMB对象的值{cout << yuan << "元" << jiao << "角" << fen << "分" << endl;}~RMB() //析构函数{--count;}//(1)重载算术运算符 + 和 -,使得可以对两个 RMB 对象进行加法和减法运算,并返回一个新的 RMB 对象作为结果。//成员函数实现 + 号运算符重载const RMB operator+(const RMB &R)const{RMB temp;//定义一个新的RMB对象temp.yuan = yuan + R.yuan;temp.jiao = jiao + R.jiao;temp.fen = fen + R.fen;temp.carry();//调用进位函数return temp;//返回temp对象}//成员函数实现 - 号运算符重载const RMB operator-(const RMB &R)const{RMB temp1;//定义一个新的RMB对象temp1.yuan = yuan - R.yuan;temp1.jiao = jiao - R.jiao;temp1.fen = fen - R.fen;temp1.borrow();// 调用借位函数return temp1;//返回temp1对象}//(2)重载关系运算符 >,判断一个 RMB 对象是否大于另一个 RMB 对象,并返回 true 或 false。//成员函数实现 > 号运算符重载bool operator>(const RMB &R)const{if(yuan > R.yuan){return true;}else if(yuan == R.yuan && jiao > R.jiao){return true;}else if(yuan == R.yuan && jiao == R.jiao && fen > R.fen){return true;}else{return false;}}//(3)重载前置减减运算符 --,使得每次调用时 RMB 对象的 yuan、jiao 和 fen 分别减 1//成员函数实现 前置-- 号运算符重载RMB& operator--(){--yuan;--jiao;--fen;return *this;}//(4)重载后置减减运算符 --,使得每次调用时 RMB 对象的 yuan、jiao 和 fen 分别减 1//成员函数实现 后置-- 号运算符重载const RMB operator--(int){RMB temp2;temp2.yuan = yuan--;temp2.jiao = jiao--;temp2.fen = fen--;return temp2;}//(5)另外, RMB 类还包含一个静态整型成员变量 count,用于记录当前已创建的 RMB 对象的数量。//每当创建一个新的 RMB 对象时,count 应该自增 1;每当销毁一个 RMB 对象时,count 应该自减 1。//获取RMB 对象的数量static int getcount(){return count;}
};int RMB::count = 0;//定义并初始化静态成员变量 count
int main()
{//在main 函数中测试上述RMB 类的功能RMB money1(10,7,6);RMB money2(6,9,5);money1.show();money2.show();cout << "---------------------------------" << endl;RMB sum1 = money1 + money2;sum1.show();cout << "---------------------------------" << endl;RMB sum2 = money1 - money2;sum2.show();cout << "---------------------------------" << endl;if(money1 > money2){cout << "money1 > money2" << endl;}else{cout << "money1 < money2" << endl;}cout << "---------------------------------" << endl;--money1;money1.show();--money2;money2.show();cout << "---------------------------------" << endl;money1--;money1.show();money2--;money2.show();cout << "---------------------------------" << endl;cout << "创建的RMB对象的数量:" << RMB::getcount() << endl;return 0;
}
运算结果