一.计数器前后自增
#include <iostream> // 引入C++标准库中的输入输出流
using namespace std; // 使用std命名空间,这样我们可以直接使用如cout而不是std::cout
class Counter { // 定义一个名为Counter的类
private: // 以下是私有成员,只能在此类内部访问
int n; // 定义一个私有整型成员n,它将用于存储计数器的值
public: // 以下是公有成员,可以在此类外部访问
Counter(int i = 0) : n(i) {}; // 构造函数,初始化计数器值为i,如果没有提供i,则默认值为0
Counter operator++(); // 前置递增运算符的重载声明
Counter operator++(int); // 后置递增运算符的重载声明
friend Counter operator--(Counter& c); // 前置递减运算符的重载声明,此处为友元函数
friend Counter operator--(Counter& c, int); // 后置递减运算符的重载声明,此处为友元函数
void display(); // 用于显示计数器当前值的成员函数
};
Counter Counter::operator++() { // 定义前置递增运算符的重载函数
++n; // 增加计数器值
return *this; // 返回增加后的对象
}
Counter Counter::operator++(int) { // 定义后置递增运算符的重载函数
Counter t = *this; // 保存当前对象的副本
n++; // 增加计数器值
return t; // 返回增加前的对象
}
Counter operator--(Counter& c) { // 定义前置递减运算符的重载函数,此处为友元函数
--c.n; // 减少计数器值
return c; // 返回减少后的对象
}
Counter operator--(Counter& c, int) { // 定义后置递减运算符的重载函数,此处为友元函数
Counter t(c.n); // 保存当前对象的副本
c.n--; // 减少计数器值
return t; // 返回减少前的对象
}
void Counter::display() { cout << "counter number=" << n << endl; } // 定义display函数,输出计数器的当前值
int main(int argc, char const* argv[]) { // 主函数,程序的入口点
Counter a; // 创建一个Counter对象a,其初始值为0
++a; // 前置递增a,a的值变为1
a.display(); // 显示a的值,输出"counter number=1"
a++; // 后置递增a,a的值变为2,但返回的是值为1的对象,但此对象没有被赋值给任何变量,所以没有影响
a.display(); // 显示a的值,输出"counter number=2"
--a; // 前置递减a,a的值变为1
a.display(); // 显示a的值,输出"counter number=1"
a--; // 后置递减a,a的值变为0,但返回的是值为1的对象,但此对象没有被赋值给任何变量,所以没有影响
a.display(); // 显示a的值,输出"counter number=0"
return 0; // 返回0,表示程序正常结束
}
二.秒钟自增运算
/* 秒钟自增运算.cpp */
//设计一个时间类Time,它能够完成秒钟的自增运算。
#include <iostream>
using namespace std;
class Time {
private:
int hour, minute, second;
public:
Time(int h, int m, int s);
Time operator++();
//友元重载需要参数
friend Time operator--(Time& t);
void display();
};
Time::Time(int h, int m, int s) {
hour = h;
minute = m;
second = s;
if (hour >= 24)
hour = 0;
if (minute >= 60)
minute = 0;
if (second >= 60)
second = 0;
}
Time Time::operator++() {
++second;
if (second >= 60) {
second = 0;
++minute;
if (minute >= 60) {
minute = 0;
++hour;
if (hour >= 24)
hour = 0;
}
}
return *this;
}
Time operator--(Time& t) {
--t.second;
if (t.second < 0) {
t.second = 59;
--t.minute;
if (t.minute < 0) {
t.minute = 59;
--t.hour;
if (t.hour < 0)
t.hour = 23;
}
}
return t;
}
void Time::display() { cout << hour << ":" << minute << ":" << second << endl; }
int main(int argc, char const* argv[]) {
Time t1(23, 59, 59);
t1.display();
++t1; //隐式调用
t1.display();
t1.operator++(); //显式调用
t1.display();
Time t2(24, 60, 60);
t2.display();
++t2;
t2.display();
--t2;
t2.display();
return 0;
}