一.思维导图
二.练习
搭建一个货币的场景,创建一个名为 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;//分
friend const Rmb operator+(const Rmb &L,const Rmb &R);
friend const Rmb operator-(const Rmb &L,const Rmb &R);
friend bool operator>(const Rmb &L, const Rmb &R);
friend Rmb &operator--(Rmb &O);
friend const Rmb operator--(Rmb &O, int);
static int count;
public:
Rmb(){ }
Rmb(int yuan,int jiao,int fen):yuan(yuan),jiao(jiao),fen(fen){
++count; // 在带参数的构造函数中增加计数
}
~Rmb() {
--count; // 在析构函数中减少计数
}
// 获取当前RMB对象数量
static int getCount() {
return count;
}
};
const Rmb operator+(const Rmb &L,const Rmb &R){//重载+
Rmb temp;
temp.yuan=L.yuan+R.yuan;
temp.jiao=L.jiao+R.jiao;
temp.fen=L.fen+R.fen;
return temp;
}
const Rmb operator-(const Rmb &L,const Rmb &R){//重载-
Rmb temp;
temp.yuan=L.yuan-R.yuan;
temp.jiao=L.jiao-R.jiao;
temp.fen=L.fen-R.fen;
return temp;
}
bool operator>(const Rmb &L, const Rmb &R)//重载>
{
if(L.yuan > R.yuan && L.jiao> R.jiao && L.fen>R.fen)
{
return true;
}
else
{
return false;
}
}
//全局 函数实现 前-- 运算符重载
Rmb &operator--(Rmb &O)
{
--O.yuan;
--O.jiao;
--O.fen;
return O;
}
//全局函数实现 后-- 运算符重载
const Rmb operator--(Rmb &O, int)
{
Rmb temp;
temp.yuan= O.yuan--;
temp.fen= O.fen--;
temp.jiao=O.jiao--;
return temp;
}
//初始化
int Rmb:: count=0;
int main()
{
Rmb rmb1(1, 2, 3);
cout << "RMB对象数量: " << Rmb::getCount() << endl; // 输出1
{
Rmb rmb2(4, 5, 6);
cout << "RMB对象数量: " << Rmb::getCount() << endl; // 输出2
} // rmb2 销毁
cout << "RMB对象数量: " << Rmb::getCount() << endl; // 输出1
return 0;
}