搭建一个货币的场景,创建一个名为 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 类的功能。
/*
*搭建一个货币的场景,创建一个名为 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; // 记录当前已创建的 RMB 对象的数量
public:
// 构造函数
RMB(int y = 0, int j = 0, int f = 0)
: yuan(y), jiao(j), fen(f) {
count++;
}
// 析构函数
~RMB() {
count--;
}
// 显示函数
void show() const {
cout << "RMB: " << yuan << "元 " << jiao << "角 " << fen << "分" << endl;
}
// 重载 + 运算符
RMB operator+(const RMB& other) const {
int totalYuan = yuan + other.yuan;
int totalJiao = jiao + other.jiao;
int totalFen = fen + other.fen;
if (totalFen >= 10) {
totalJiao += totalFen / 10;
totalFen %= 10;
}
if (totalJiao >= 10) {
totalYuan += totalJiao / 10;
totalJiao %= 10;
}
return RMB(totalYuan, totalJiao, totalFen);
}
// 重载 - 运算符
RMB operator-(const RMB& other) {
*this = (RMB(0,0,0) + (*this));
RMB temp = (RMB(0,0,0) + other);
int totalYuan = this->yuan - temp.yuan;
int totalJiao = this->jiao - temp.jiao;
int totalFen = this->fen - temp.fen;
return RMB(totalYuan, totalJiao, totalFen);
}
// 重载 > 运算符
bool operator>(const RMB& other) const {
if (yuan > other.yuan)
return true;
else if (yuan == other.yuan && fen > other.fen)
return true;
else if (fen == other.fen && jiao > other.jiao)
return true;
else
return false;
}
// 重载前置 --运算符
RMB& operator--() {
if (fen > 0) {
fen--;
} else {
jiao--;
fen = 9;
}
if (jiao < 0) {
yuan--;
jiao = 9;
}
return *this;
}
// 重载后置 -- 运算符
RMB operator--(int) {
RMB temp(*this);
--(*this);
return temp;
}
// 获取 count
static int getcount() {
return count;
}
};
// 初始化静态成员变量
int RMB::count = 0;
int main()
{
RMB r1(9, 10, 10);
RMB r2(10, 6, 0);
RMB r = r1 - r2;
r.show();
return 0;
}