#include <iostream>
using namespace std;
class Counter
{
public:
Counter(int x)
{
cnt = x;
}
Counter() {};
friend Counter& operator--(Counter& p); // 重载前置自减为类的友元函数
friend Counter operator--(Counter& p, int);
void display()
{
cout << "counter = " << cnt << endl;
}
~Counter() {};
private:
int cnt = 0;
};
Counter& operator--(Counter& p)//前置自减
{
if (p.cnt > 0)
p.cnt--;
return p;
}
Counter operator--(Counter& p, int)//后置自减
{
Counter temp(p);
//用了拷贝构造函数来创建一个新的Counter对象temp,其初始值与参数p相同
//使用默认的拷贝构造函数
/* Counter::Counter(const Counter& per)
{
cnt = per.cnt;
}*/
if (p.cnt > 0)
p.cnt--;
return temp;
}
int main() {
Counter a(200);
----a;
a.display();
for (int i = 0; i < 100; i++)
a--;
a.display();
return 0;
}
重载后置自减函数中,Counter temp(p)使用了默认的拷贝构造函数,类中没有
Counter::Counter(const Counter& per)
{
cnt = per.cnt;
}