搭建一个货币的场景,创建一个名为 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;public:
static int count;RMB(int y = 0, int j = 0, int f = 0) : yuan(y), jiao(j), fen(f) {
count++;
}~RMB() {
count--;
}
int getYuan() const { return yuan; }
int getJiao() const { return jiao; }
int getFen() const {return fen; }RMB operator+(const RMB& other) {
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) {
int totalYuan = yuan - other.yuan;
int totalJiao = jiao - other.jiao;
int totalFen = fen - other.fen;if (totalFen < 0) {
totalJiao--;
totalFen += 10;
}if (totalJiao < 0) {
totalYuan--;
totalJiao += 10;
}return RMB(totalYuan, totalJiao, totalFen);
}bool operator>(const RMB& other) {
if (yuan > other.yuan) {
return true;
} else if (yuan == other.yuan && jiao > other.jiao) {
return true;
} else if (yuan == other.yuan && jiao == other.jiao && fen > other.fen) {
return true;
}
return false;
}RMB& operator--() {
yuan--;
jiao--;
fen--;
if (fen < 0) {
jiao--;
fen += 10;
}if (jiao < 0) {
yuan--;
jiao += 10;
}
return *this;
}RMB operator--(int) {
RMB temp(*this);
yuan--;
jiao--;
fen--;
if (fen < 0) {
jiao--;
fen += 10;
}if (jiao < 0) {
yuan--;
jiao += 10;
}
return temp;
}
};int RMB::count = 0;
int main() {
RMB rmb1(10, 9, 8);
RMB rmb2(5, 8, 6);RMB sum = rmb1 + rmb2;
std::cout << "相加结果: " << sum.getYuan() << " 元 " << sum.getJiao() << " 角 " << sum.getFen() << " 分" << std::endl;RMB diff = rmb1 - rmb2;
std::cout << "相减结果: " << diff.getYuan() << " 元 " << diff.getJiao() << " 角 " << diff.getFen() << " 分" << std::endl;if (rmb1 > rmb2) {
std::cout << "rmb1 大于 rmb2" << std::endl;
} else {
std::cout << "rmb1 不大于 rmb2" << std::endl;
}--rmb1;
std::cout << "前置--后 rmb1: " << rmb1.getYuan() << " 元 " << rmb1.getJiao() << " 角 " << rmb1.getFen() << " 分" << std::endl;RMB rmb3 = rmb1--;
std::cout << "后置--后 rmb1: " << rmb1.getYuan() << " 元 " << rmb1.getJiao() << " 角 " << rmb1.getFen() << " 分" << std::endl;
std::cout << "后置--产生的新对象 rmb3: " << rmb3.getYuan() << " 元 " << rmb3.getJiao() << " 角 " << rmb3.getFen() << " 分" << std::endl;std::cout << "当前 RMB 对象数量: " << RMB::count << std::endl;
return 0;
}