cpp
复制代码
#include <iostream>
using namespace std;
class RMB
{
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);
private:
int temp;
int yuan;
int jiao;
int fen;
static int count;
void normal()
{
if(fen>=10)
{
jiao+=1;
fen-=10;
}
if(jiao>=10)
{
yuan+=1;
jiao-=10;
}
if(jiao<0)
{
yuan-=1;
jiao+=10;
}
if(fen<0)
{
jiao-=1;
fen+=10;
}
}
public:
//无参数
RMB()
{
cout<<"rmb无参数"<<endl;
}
//有参数
RMB(int yuan,int jiao,int fen):yuan(yuan),jiao(jiao),fen(fen)
{
cout<<"rmb有参数"<<endl;
count++;
}
//析构函数
~RMB()
{
count--;
}
void display() const
{
cout << yuan << "元" << jiao << "角" << fen << "分" << endl;
}
// 获取当前对象数量
static int getCount()
{
return count;
}
};
int RMB::count=0;
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;
temp.normal();
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;
temp.normal();
return temp;
}
bool operator >(const RMB &L,const RMB &R)
{
if(L.yuan>R.yuan)
return true;
else if(L.yuan==R.yuan)
{
if(L.jiao>R.jiao)
return true;
else if(L.jiao==R.jiao)
{
if(L.fen>R.fen)
return true;
}
}
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.jiao=O.jiao--;
temp.fen=O.fen--;
return temp;
}
int main()
{
cout << "创建对象前,对象数量:" << RMB::getCount() << endl;
RMB p1(10, 5, 4);
cout << "p1: ";
p1.display();
RMB p2(9, 5, 1);
cout << "p2: ";
p2.display();
cout << "创建对象后,对象数量:" << RMB::getCount() << endl;
RMB p3 = p1 + p2;
cout << "p1 + p2: ";
p3.display();
RMB p4 = p1 - p2;
cout << "p1 - p2: ";
p4.display();
cout << "p1 > p2: " << (p1 > p2 ? "true" : "false") << endl;
RMB p5 = --p1;
cout << "前置--p1后,p5: ";
p5.display();
cout << "p1: ";
p1.display();
RMB p6 = p2--;
cout << "后置--p2后,p6: ";
p6.display();
cout << "p2: ";
p2.display();
cout << "当前对象数量:" << RMB::getCount() << endl;
return 0;
}