搭建一个货币的场景,创建一个名为 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(){count++;}
// 有参构造函数
RMB(int yuan, int jiao, int fen):yuan(yuan), jiao(jiao), fen(fen){
count++;
}
// 拷贝构造函数
RMB(const RMB &other):yuan(other.yuan), jiao(other.jiao), fen(other.fen){
count++;
}
// 析构函数
~RMB(){
count--;
}
// 静态成员函数
static int existCount(){
return count;
}
RMB operator+(const RMB &R){
RMB temp;
temp.yuan = yuan + R.yuan;
temp.jiao = jiao + R.jiao;
temp.fen = fen + R.fen;
return temp;
}
RMB operator-(const RMB &R){
RMB temp;
temp.yuan = yuan - R.yuan;
temp.jiao = jiao - R.jiao;
temp.fen = fen - R.fen;
return temp;
}
RMB &operator--(){
--yuan;
--jiao;
--fen;
return *this;
}
RMB operator--(int){
RMB temp;
temp.yuan = yuan--;
temp.jiao = jiao--;
temp.fen = fen--;
return temp;
}
bool operator>(const RMB &other){
return yuan*100+jiao*10+fen > other.yuan*100+other.jiao*10+other.fen;
}
void show(){
cout << "yuan " << yuan << endl;
cout << "jiao " << jiao << endl;
cout << "fen " << fen << endl;
}
};
// 静态变量初始化
int RMB::count;
int main()
{
// 测试数据
RMB r1(200, 2, 2);
RMB r2(100, 1, 1);
cout << "=====\"+\"重载测试=====" << endl;
RMB r3 = r1 + r2;
r3.show();
cout << "=====\"-\"重载测试=====" << endl;
r3 = r1 - r2;
r3.show();
cout << "=====\"前置--\"重载测试=====" << endl;
RMB r4 = --r3;
r4.show();
r3.show();
cout << "=====\"后置--\"重载测试=====" << endl;
r4 = r3--;
r4.show();
r3.show();
cout << "=====\">\"重载测试=====" << endl;
if(r1 > r2){
cout << "true" << endl;
}else{
cout << "false" << endl;
}
cout<< "===静态成员变量功能测试===" << endl;
cout << "现存RMB对象: " << RMB::existCount() << endl;
RMB* r5 = new RMB(300, 3, 3);
cout << "现存RMB对象: " << RMB::existCount() << endl;
delete r5;
cout << "现存RMB对象: " << RMB::existCount() << endl;
return 0;
}
结果
====="+"重载测试=====
yuan 300
jiao 3
fen 3
====="-"重载测试=====
yuan 100
jiao 1
fen 1
====="前置--"重载测试=====
yuan 99
jiao 0
fen 0
yuan 99
jiao 0
fen 0
====="后置--"重载测试=====
yuan 99
jiao 0
fen 0
yuan 98
jiao -1
fen -1
=====">"重载测试=====
true
===静态成员变量功能测试===
现存RMB对象: 4
现存RMB对象: 5
现存RMB对象: 4
思源笔记